پرش به محتوا

اینکلود گارد

از ویکی‌پدیا، دانشنامهٔ آزاد

در زبانهای برنامه‌نویسی 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 مصون می‌ماند و به‌درستی کامپایل می‌شود.

پیوند به بیرون

[ویرایش]