Avatar ·

#pragma once مقابل include guards: ماذا تختار للحماية من التضمين المتكرر؟

مرحبًا بالجميع! أنا مطور C++ مبتدئ وقد واجهت عدة مرات مشكلة التضمين المزدوج لملفات الرأس. على سبيل المثال، لدي هذا الكود:

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b) { return a + b; }

#endif

// main.cpp
#include "math_utils.h"
#include "math_utils.h"  // случайно включил дважды

int main() {
    return add(2, 3);
}

مع include guards، كل شيء يعمل، لكنني لاحظت أن العديد من المشاريع الحديثة (مثل تلك من Boost) تستخدم #pragma once. لقد قرأت أن هذا توجيه غير قياسي، لكنه مدعوم من جميع المترجمات الرئيسية.

ما يهمني هو:

  • هل هناك مشاكل حقيقية في الأداء مع include guards؟