#pragma once چیه؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

#pragma once چیه؟

+4 امتیاز
209 بازدید
سلام . چرا بایستی توی header file از #pragma once استفاده کنیم و اگر قرار ندیدیم چه اتفاقی میوفته؟ چرا بعضی از هدر فایل ها همچین چیزی ندارند؟
سوال شده آبان 30, 1392 بوسیله ی بی نام  

2 پاسخ

+7 امتیاز
 
بهترین پاسخ

pragma once یه رهنمود-پیش پرداز (Preprocessor Directive) برای همگردان(کامپایلر) های C و ++C هست .

با اینکه در بخش استاندارد زبان ++C/C نیست , ولی خیلی بکاربرده میشه .

اگر خوب به بیشتر فایل های سرآمد نگاه کنی, میفهمی که کموبیش همشون دارای پاسگان هستند.

برای نمونه پاسگان های فایل foo.h اینجوری نوشته میشه :

#ifndef FOO_H
#define FOO_H

...
...
...


#endif //FOO_H

گذاشتن پاسگان برای اینه که اگر این فایل از فایل دیگه ای با include# دربرگرفته شد , تنها یک بار این کار روش انجام بشه .

اگر ما فایل a.h و b.h داشته باشیم و هر دوی اونها فایل c.h رو با include# دربربگیرن . و ما فایل های a.h و b.h رو در برنامه بکاربگیریم ایرادی که درست میشه اینه که چون هم فایل a.h و b.h فایل c.h رو دربرگرفتن , همه ی چیزهایی که تو فایل  c.h تعریف شده دو باره در برنامه تعریف میشه و با خطای تعریف چندباره روبرو میشویم .

هدف اینکه ما پاسگان ها رو مینویسم برای جلوگیری از این ایراده.

pragma once جایگزین برای نوشتن پاسگان ها توی فایل های سرآمد هست . همین ! 

پاسخ داده شده آبان 30, 1392  بوسیله ی Ali Rahbar (امتیاز 4,805)   4 14 46
یکی از مزایای pragma اینه که از اشتباه توی اسم گزاری include guard ها و گذاشتن اسم مشابه جلوگیری می کنه .
+5 امتیاز
علاوه بر پاسخ مفصلی که دوستان دادند این رهنمود باعث افزایش سرعت کامپایل هم میشه و بجای pragma once بهتر از gaurd استفاده شه که استاندار هم هستش.چون در بعضی از embedded سیستم ها pragma ساپورت نمیشه
پاسخ داده شده آذر 1, 1392 بوسیله ی مصطفی ساتکی (امتیاز 16,378)   16 24 66
...