Include guard#
عنوان مناسب برای این مقاله include guard# است که نشانهٔ # بدلیل محدودیتهای فنی حذف شده است.
در زبانهای برنامهنویسی C و ++C، یک Include guard# که در بعضی مواقع macro guard نیز خوانده میشود، ساختار و روشی است برای اجتناب و جلوگیری از مشکل الحاق مجدد فایلهای هدر توسط رهنمون include#.
الحاق مجدد [ویرایش]
در نمونه کد زیر مشکل الحاق مجدد نشان داده شده است.
- فایل "grandfather.h"
struct foo { int member; };
- فایل "father.h"
#include "grandfather.h"
- فایل "child.c"
#include "grandfather.h" #include "father.h"
در مثال بالا، فایل "child.c" بصورت غیرمسقیم دو نسخه از متون موجود در فایل هدر "grandfather.h" را الحاق میکند که باعث ایجاد خطای زمان کامپایل میشود. بدلیل اینکه ساختار foo دو بار باید تعریف شود و این غیر ممکن است.
استفاده از Include guard# [ویرایش]
- فایل "grandfather.h"
#ifndef GRANDFATHER_H #define GRANDFATHER_H struct foo { int member; }; #endif
- فایل "father.h"
#include "grandfather.h"
- فایل "child.c"
#include "grandfather.h" #include "father.h"
در اینجا، اولین باری که فایل "grandfather.h" الحاق میشود، ماکروی GRANDFATHER_H تعریف میشود. سپس زمانی که توسط "child.c" این فایل هدر دوباره الحاق میشود نتیجهٔ ifndef# مقدار نادرست خواهد بود و روند پیشپردازش از بعد از دستور endif# ادامه خواهد یافت و برنامه از تعریف مجدد ساختار struct foo مصون میماند و بدرستی کامپایل میشود.