اینکلود گارد

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو


عنوان مناسب برای این مقاله#اینکلود گارد است که نشانهٔ # بدلیل محدودیتهای فنی حذف شده است.

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

پیوند به بیرون[ویرایش]