مرجع سريع

ورقة مساعدة لماكرو وتوجيهات المعالج المسبق لـ C

مرجع سريع للمعالج المسبق لـ C (cpp): تضمين الترويسات، تعريفات الماكرو، دمج الرموز (##)، تحويل النصوص (#)، والترجمة الشرطية.

· تاريخ النشر

مرجع سريع لبناء جملة المعالج المسبق للغة C (cpp)، والذي يمكن تشغيله بشكل مستقل أو ضمن أدوات بناء C/C++.

المعالجة المسبقة المستقلة

تشغيل المعالج المسبق مباشرة دون استدعاء المترجم الكامل:

# الخيار -P يمنع إنشاء علامات أرقام الأسطر
cpp -P source.c > preprocessed.c

تضمين الترويسات (Header Inclusions)

#include <stdio.h>      /* ترويسات النظام والمكتبة القياسية */
#include "my_header.h"  /* ترويسات المشروع المحلية */

تعريفات الماكرو (Macro Definitions)

#define BUFFER_SIZE 1024
#define PI 3.1415926535

/* إلغاء تعريف ماكرو */
#undef BUFFER_SIZE

ماكرو شبيه بالدوال (Function-Like Macros)

#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define DEG_TO_RAD(x) ((x) * 0.0174532925)

تحويل المعاملات إلى نصوص (Stringification - #)

يقوم العامل الفردي # بتحويل معاملات الماكرو إلى سلاسل نصية ثابتة:

#define STR(name) #name
#define PRINT_VAR(x) printf("%s = %d\n", #x, x)

char *var_name = STR(my_object);  /* → "my_object" */

دمج الرموز (Token Concatenation - ##)

يقوم العامل المزدوج ## بدمج رمزين معا في رمز برمجي واحد:

#define COMMAND(NAME) { #NAME, NAME ## _command }

struct command commands[] = {
  COMMAND(quit),   /* → { "quit", quit_command } */
  COMMAND(help)    /* → { "help", help_command } */
};

الترجمة البرمجية الشرطية (Conditional Compilation)

#ifdef DEBUG
  #define LOG(msg) printf("[DEBUG] %s\n", msg)
#elif defined(VERBOSE)
  #define LOG(msg) printf("[INFO] %s\n", msg)
#else
  #define LOG(msg) /* noop */
#endif

/* حراس التضمين (Include guards لمنع التكرار) */
#ifndef MY_HEADER_H
#define MY_HEADER_H

/* التصريحات هنا */

#endif /* MY_HEADER_H */

التشخيصات والتحذيرات (Diagnostics & Warnings)

#if __STDC_VERSION__ < 201112L
  #warning "C11 features are not fully enabled"
#endif

#if !defined(REQUIRED_CONFIG)
  #error "REQUIRED_CONFIG must be defined before compilation"
#endif

ماكرو قياسي معرف مسبقا

  • __FILE__: اسم ملف المصدر الحالي كسلسلة نصية.
  • __LINE__: رقم السطر الحالي كعدد صحيح.
  • __DATE__: تاريخ الترجمة كسلسلة نصية (Mmm dd yyyy).
  • __TIME__: وقت الترجمة كسلسلة نصية (hh:mm:ss).

موضوعات ذات صلة