پیشپردازنده در C
دستورات پیشپردازنده شامل include، define و دستورات شرطی کامپایل
پیشپردازنده چیست؟
قبل از کامپایل واقعی، مرحلهای به نام پیشپردازش (Preprocessing) اجرا میشود. دستورات این مرحله با # شروع میشوند و کامپایلر قبل از کد اصلی آنها را پردازش میکند.
#include — درج فایل
محتوای یک فایل هدر را در برنامه قرار میدهد:
#include <stdio.h> // فایلهای سیستم — از مسیرهای استاندارد
#include "myheader.h" // فایلهای پروژه — از پوشه فعلی
#define — تعریف ماکرو
#define PI 3.14159
#define MAX_STUDENTS 50
double area = PI * r * r;
پیشپردازنده قبل از کامپایل، هر PI را با 3.14159 جایگزین میکند.
ماکروهای تابعمانند
#define SQUARE(x) ((x) * (x))
int result = SQUARE(5); // میشود ((5) * (5)) = 25
⚠️ پرانتزها مهماند! بدون پرانتز SQUARE(2+3) به 2+3*2+3 تبدیل میشود که ۱۱ است نه ۲۵!
ماکروهای از پیش تعریفشده
| ماکرو | مقدار |
|---|---|
__DATE__ | تاریخ کامپایل |
__TIME__ | زمان کامپایل |
__FILE__ | نام فایل فعلی |
__LINE__ | شماره خط فعلی |
دستورات شرطی کامپایل
برای کامپایل شرطی بخشهایی از کد:
#define DEBUG 1
#if DEBUG
printf("Debug mode is on!");
#endif
#ifdef PI
// اگر PI تعریف شده باشد کامپایل میشود
#endif
#ifndef MY_HEADER
#define MY_HEADER
// محتوای هدر — از درج دوباره جلوگیری میکند
#endif
Include Guard — الگوی مهم هدرها
در فایلهای هدر خودتان همیشه این الگو را بگذارید تا از درج دوباره جلوگیری شود:
// myheader.h
#ifndef MYHEADER_H
#define MYHEADER_H
// محتوای هدر اینجا
#endif
نکات مهم
- دستورات پیشپردازنده نقطهویرگول نمیگیرند
- ماکروها نوع ندارند — کامپایلر آنها را بررسی نمیکند؛ const ایمنتر است
- برای ثابتهای عددی از const و برای شرط کامپایل از #define استفاده کنید
این مبحث بخشی از دوره آموزش کامل زبان C است.