اینکلود گارد
در زبانهای برنامهنویسی C و ++C، یک #اینکلود گارد که در بعضی مواقع ماکرو گارد (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
مصون میماند و بهدرستی کامپایل میشود.