#ifndef HEADERFILE_H
#define HEADERFILE_Hand at the end of the file is
سلام#endif
امکان داره توضیح بدید؟ دقیقا هیچی نفهیدم
مثالی چیزی
#ifndef HEADERFILE_H
#define HEADERFILE_Hand at the end of the file is
سلام#endif
امکان داره توضیح بدید؟ دقیقا هیچی نفهیدم
مثالی چیزی
|
|
مدیر انجمن برنامه نویسی و رباتیک
سلام!
به چنین دستوراتی پیش پردازنده می گن که قبل از کامپایل کد اصلی اجرا میشن تا تغییراتی رو روی کد اصلی پیش از کامپایل اعمال کنن.
با توجه به کدی که قرار دادید یه identifier به نام HEADERFILE_H وجود داره. با اجرای خط اول کد شما توسط کامپایلر، دستور #ifndef بررسی می کنه آیا HEADERFILE_H قبلا" تعریف شده یا خیر. اگر تعریف نشده باشه، کامپایلر میره سراغ خط بعد و با دستور #define این identifier رو تعریف می کنه و در نهایت کد ها تا قبل از رسیدن به عبارت #endif کامپایل میشن. ولی اگر HEADERFILE_H قبلا" با دستور #define تعریف شده باشه، کامپایلر کد های بعد از عبارت #endif رو کامپایل می کنه.
حالا دلیل استفاده از این دستورات چیه؟
فرض کنیم کد شما دقیقا" به این شکله و در هدرفایلی به نام parents.h نوشته شده:
همچنین فرض کنیم هدرفایلی دیگه ای به نام child.h هم وجود داره که توش هدرفایل parents.h وارد شده؛ به شکل زیر:کد:#ifndef HEADERFILE_H #define HEADERFILE_H struct foo { int member; }; #endif
حالا ما در کد اصلی فرضا" به دلایلی نیاز داریم هر دو هدرفایل رو وارد کنیم"کد:#include "parents.h"
در parents.h یک بار متغیر member تعریف میشه و در child.h هم چون هدر parents رو include کردیم، قاعدتا" یه بار دیگه باید متغیر member تعریف بشه و از طرفی تعریف بیش از یک بار یه متغیر سبب بروز خطا میشه. ولی حالا بیاییم بررسی کنیم که چطوری پیش پردازنده های استفاده شده، مانع از بروز چنین خطایی میشن:کد:#include "parents.h" #include "child.h"
در خط اول کد اصلی، اول هدر parents وارد میشه.
در خط اول هدر parents تعریف HEADERFILE_H بررسی میشه. چون HEADERFILE_H قبلا" تعریف نشده، در خط دوم همین هدر تعریف میشه و کد های هدر تا عبارت #endif کامپایل میشن.
در خط دوم کد اصلی، هدر child وارد میشه.
در خط اول هدر child هدر parents مجددا" وارد میشه.
در خط اول هدر parents تعریف HEADERFILE_H بررسی میشه. چون این بار HEADERFILE_H تعریف شده، کد ها تا عبارت #endif کامپایل نمیشن و در نتیجه متغیر member مجددا" تعریف نمیشه. بدین وسیله توسط پیش پردازنده ها از بروز خطا جلوگیری کردیم.
برای اطلاعات بیش تر:
http://www.cplusplus.com/doc/tutorial/preprocessor/
آخرین ویرایش توسط ravegoat در تاریخ 04-06-13 انجام شده است علت: ویرایش سورس کد
'چو ایران نباشد، تن من مباد
Dim Armin As Iranian
If Iran.Enabled = False Then Armin.Enabled = False
1 کاربر در حال مشاهده این موضوع. (0 عضو و 1 میهمان)
Bookmarks