اطلاعیه

Collapse
No announcement yet.

فایل های .h در زبان c

Collapse
این موضوع بسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    فایل های .h در زبان c

    سلام دوستان
    بنده 1 سوال داشتم و شاید خیلی سخت نباشه و چون من خیلی ذهنیت ندارم در بارش برام سخته
    سوالم در باره فایل های .h بود که در زبان c استفاده میشه و اول برنامه ها فراخوانی میشه ، اول میخواستم بدونم نحوه استفاده این فایل ها چه شکلی هست و ما اگه به فرض فایل .h یه ماژول یا تراشه یا LCD رو داشته باشیم چطور باید ازش استفاده کنیم؟و از کجا باید بدونیم چه دستوراتی رو باید استفاده کنیم؟تا اوون .h تو برنامه اصلی تاثیر داشته باشه.... .
    سوال بعدیم اینه که چطور میشه این فایل های .h رو ساخت ؟


    ممنون میشم اگه جواب خوب و کاملی بدید...

    #2
    پاسخ : فایل های .h در زبان c

    به طور ساده:
    این فایل ها حاوی یکسری تابع و ثابت(اگه اشتباه نکنم) هستند که در طول برنامه میتونیم ازشون استفاده کنیم و فراخونیشون کنیم
    ساختش هم خیلی راحته البته من تا حالا با کمپایلر های pic کار نکردم! این مورد رو دوستان واستون توضیح میدند

    دیدگاه


      #3
      پاسخ : فایل های .h در زبان c

      در ادامه فرمایش جناب علی پور باید این نکته رو هم خاطر نشان کرد که؛
      معمولا برنامه نویس در هنگام نوشتن یک تابع کلا حواسش جمع هست (البته معمولا. چون خیلی وقتها برنامه نویس های حواس پرت و گیج هم داریم!! :mrgreen اما در هنگام استفاده ممکنه اشتباهاتی هم بکنه. یکی از این موارد اشتباه اینه که چون کامپایلر C بطور عام یک کامپایلر حساس به فرم نوشتاری و فراخوانی یک تابع نیست و خیلی وقتها پیش خودش فکر میکنه: "فلانی خودش حواسش هست" و بخاطر همین بنا بر پیش فرضها جلو میره؛ ممکنه بلاهای زیادی سر برنامه نویس بیاد.

      بذارین یک مثال بزنم.
      در یک پروژه؛ مشتمل بر چند فایل مجزا؛ تابعی بنام add داریم بصورت زیر:


      long add(long a, long b)
      {
      return a + b;
      }


      این تابع همونطوری که از دیدنش برمیاد 2 مقدار long میگیره و جمعشون رو برمیگردونه. حالا فرض کنین بدون اینکه من قبل از استفاده از این تابع؛ اون رو به کامپایلر معرفی کنم (با نوشتن متنش فرق میکنه ها!) میتونم براحتی تمام فرم های زیر رو استفاده کنم:

      add(5.5, 3);
      add("aaa", 27);
      add("a", "b"
      add(&p);


      مسخره هست؟ نه؟ ما طبق کدی که نوشتیم قرار نیست رشته یا عدد اعشاری به این تابع پاس کنیم. از طرف دیگه پارامتری مثل 3 چون بفرم طبیعی یک عدد int هست و در خیلی جاها یک عدد int از لحاظ حجمی متفاوت با long هست و کامپایلر در مرحله ساختن کد نمیدونه که واقعا تابع add چه نوع پارامتر هایی و به چه تعدادی داره هر کدی رو ممکنه براتون تولید کنه. اما پیش فرض تابع فوق در زمان اجرا اینه که باید دو مقدار long برداره و استفاده کنه. بنا براین برنامه بهم میریزه. و درست کار نمیکنه. در حالت عادی قاعدتا بایستی کامپایلر در هنگام دیدن ایرادات اینچنینی با بروز خطا متوقف بشه. ولی با نداشتن اطلاعاتی در خصوص تابع؛ نهایتا با ایجاد یک warning به کامپایلش ادامه میده.
      برای پرهیز از اینگونه مواقع میاییم اصطلاحا فرم prototype تابع رو قبل از استفاده معرفی میکنیم:

      long add(long a, long b);


      یا


      long add(long, long);


      و این ها رو قبل از موقعیت استفاده در سورس قید میکنیم. با داشتن اینها کامپایلر C دیگه دچار خطا در تولید کد نمیشه و بلافاصله خطای فراخوانی غلط یک تابع رو صادر میکنه و وای می ایسته.
      ....

      دیدگاه


        #4
        پاسخ : فایل های .h در زبان c

        ....
        اما چون قید کردن این همه اطلاعات به صورت دستی در ابتدای هر فایل ممکنه باعث دردسر و اشتباه مجدد بشه؛ اونها رو در یک فایل متنی قرار میدیم و توسط دستور پیش پردازش include به طور معمول ابتدای فایل خودمون ضمیمه میکنیم. این رو اصطلاحا یک فایل پیشتاز میگن و برای اینکه برای خودمون بیشتر به چشم بیاد که با سورس های عادی c فرق داره با نوع h. ذخیره اش میکنیم.

        تازه بحث مقادیر ثابت؛ ماکروها؛ توابع inline؛ و حتی یک سری چک های اولیه در زمان کامپایل بجای خود.

        دیدگاه

        لطفا صبر کنید...
        X