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؟