با سلام خدمت تمامی دوستان عزیز سایت پی وی لرن .و کاربرانی که دوره کامل آموزش زبان C را دنبال می کنند. و کاربرانی که با سری آموزش های زبان C همراهمون هستند. در این جلسه قصدداریم فایل های header در زبان C و عملیات include کردن در C رو مورد بحث قرار می دهیم.در ابتدا درمورد فایل های header در زبان C صحبت می کنیم.
فایل header یک فایل با پسوند h. است که شامل اعلان های توابع C و تعریف ماکروهایی است و بین چندین فایل منبع به اشتراک گذاشته می شود. دو نوع فایل header وجود دارد: فایلهایی که برنامه نویس خودش می نویسد و آن هایی که از قبل نوشته شده اند و به همراه کامپایلر ارائه می شوند.
در یک برنامه C شما با استفاده از پیش پردازنده #include درخواست استفاده از یک فایل header را به کامپایلر می دهید.
مانند stdio.h که در اکثر برنامه های C وجود دارد. Include کردن یک فایل header به معنای کپی محتوای آن فایل است.
اما از آن جایی که این کار اشتباهی است و ارور میدهد ما آن را انجام نمی دهیم.
ایده خوب، کپی کردن محتوای یک فایل هدر در فایل های منبع، به خصوص زمانی که ما فایل منبع چندگانه را در یک برنامه داشته باشیم است.
یک راه ساده در برنامه های C/C++ این است که تمام ثابت ها، ماکروها، متغیرهای عمومی و الگوی توابع را در فایل های header نگه داریم تا هر کجا که لازم بود، از آن ها استفاده کنیم.
به منظور استفاده فایل های header سیستم باید دستور #include را به صورت زیر بنویسید:
1 | #include <file> |
این فرم برای header فایل های سیستم استفاده می شود.
کامپایلر یک فایل با نام ‘file’ را در فهرست استاندارد مربوط به پوشه سیستم جستجو می کند.
در هنگام کامپایل کد منبع، شما می توانید فهرست های این لیست را با گزینه I- اضافه کنید.
1 | #include "file" |
این فرم برای header فایل های برنامه استفاده می شود.
کامپایلر یک فایل با نام ‘file’ را در پوشه حاوی فایل فعلی یا پوشه ای که برنامه شما در آن قرار دارد جستجو می کند.
در هنگام کامپایل کد منبع شما می توانید فهرست های این لیست را با گزینه I- اضافه کنید.
عملیات include کردن در C : کامپایلر قبل از این که عمل کامپایل برنامه شما را انجام دهد، فایل های header تعریف شده را اسکن می کند.
همچنین موارد لازم را به برنامه شما اضافه می کند و سپس برنامه نهایی را کامپایل می کند.
برای نمونه به مثال زیر توجه کنید.اگر تابع زیر را در فایل header.h بنویسیم:
1 | char *test (void); |
و یک برنامه اصلی به نام program.c که از header فایل استفاده می کند، مثل این است:
1 2 3 4 5 6 | <span class="kwd">int</span><span class="pln"> x</span><span class="pun">;</span> <span class="com">#include</span> <span class="str">"header.h"</span> <span class="kwd">int</span><span class="pln"> main </span><span class="pun">(</span><span class="kwd">void</span><span class="pun">)</span> <span class="pun">{</span><span class="pln"> puts </span><span class="pun">(</span><span class="pln">test </span><span class="pun">());</span> <span class="pun">}</span> |
کامپایلر کد فوق را ابتدا به شکل زیر در می آورد و سپس آن را کامپایل می کند:
1 2 3 4 5 6 | int x; char *test (void); int main (void) { puts (test ()); } |
اگر یک header فایل دو بار به برنامه اضافه شود، کامپایلر هم آن را دو بار پردازش خواهد کرد.
بنابراین باعث بوجود آمدن خطا می شود. برای جلوگیری از این موضوع می توانید برای include کردن فایل ها ،شرط تعیین کنید.مانند مثال زیر:
1 2 3 4 5 6 | #ifndef HEADER_FILE #define HEADER_FILE the entire header file file #endif |
این ساختار معمولا به عنوان پوشهifndef# شناخته می شود.
هنگامی که header دوبار در برنامه اضافه شده باشد، شرط نادرست خواهد بود، زیرا HEADER_FILE تعریف شده است.
پیش پردازنده تمام محتویات فایل را جست و جو می کند و کامپایلر آن را دو بار نمی بیند.
عملکر ساختار بالا به این صورت است که ابتدا با استفاده از دستور #ifndef بررسی می کند که آیا فایل header تعریف شده است یا خیر.
اگر تعریف نشده باشد، واردبلوک if می شود و با دستور #define آن را تعریف می کند. دستور #endif هم نشان دهنده پایان بلوک if است.
گاهی اوقات لازم است یکی از چندین فایل هدر مختلف را که در برنامه شما وجود دارد انتخاب کنید.به عنوان مثال، آنها ممکن است پارامترهای پیکربندی را برای انواع مختلف سیستم عامل مورد استفاده قرار دهند. شما می توانید این کار را با یک سری شرایط به شرح زیر انجام دهید .
1 2 3 4 5 6 7 | #if SYSTEM_1 # include "system_1.h" #elif SYSTEM_2 # include "system_2.h" #elif SYSTEM_3 ... #endif |
برای نام هدر بجای گذاشتن پیش پردازنده می توانید یک ماکرو استفاده کنید و به جای نوشتن نام هدر به عنوان دستور آرگومان #include، شما به راحتی می توانید نام ماکرو را در آنجا قرار دهید .
1 2 3 | #define SYSTEM_H "system_1.h" ... #include SYSTEM_H |
SYSTEM_H گسترش خواهد یافت و پیش پردازنده به دنبال system_1.h خواهد بود، همانطور اگر include# در ابتدا نوشته شده بود.SYSTEM_H می تواند توسط Makefile شما با یک گزینه D- تعریف شود.
این جلسه فایل های header در زبان C و عملیات include کردن در C رو داشتیم ، در ادامه مباحث تخصصی تری از زبان سی را خواهیم داشت.
علیرضا
چهارمین مثال استفاده شده در این صفحه اشتباه دارد و کد های html آن نمایان است