C++/פקודות לקדם-מעבד

< C++

פקודות לקדם מעבד הן בתחילת שורה ומתחילות עם התו # ומסתימות ללא התו ;
באופן כללי הקדם מעבד רץ לפני הקומפילציה ומחליף ומוסיף טקסט לפי הפקודות שהוא מקבל

פקודות נפוצות הן
include

define
לדוגמה קריאה לקדם מעבד להכליל את הספריה iostream
ניתן להכליל קבצים שאנחנו כותבים כך שאם יש לנו קובץ "A.h" ואנו רוצים להשתמש בו נשתמש בפקודת include כמו בשורה השניה בדוגמא

השורה הבאה היא פקודה לקדם מעבד להחליף את המחרוזת NUM במחרוזת 5 


לדוגמא

#include <iostream> 
#include "A.h"
#define NUM 5
int main()
{
   int arr[NUM]; 
.
.
}

אפשר לא להגדיר ערך, זה שימושי בעיקר בהנחיות ifdef ו-ifndef.

אפשר גם להגדיר מין פונקציה כלולה (inline function).

כך:

#define MACRO(x) /
    cout << x;

כל פעם שצריך לעבור שורה, משתמשים בתו /. אפשר להשתמש במקרו גם ב-#, שמשמעותו "הקף בגרשיים". כגון:

#define MACRO(x) #x

int main()
{
    cout << MACRO(abcd)
}

נקבל בפלט abcd - תוצאת המקרו הייתה "abcd". אפשר גם להגדיר ## - שירשור של שמות משתנים. נגיד:

#define MACRO(x,y) x ## y

int main()
{
    int ab = 6;
    cout << MACRO(a,b);
}

נקבל 6. תוצאת המקרו הייתה ab.

ifdef...endif

אם מוגדר המקרו שאחרי ifdef, יבוצעו כל ההוראות על ל-endif (למעשה, זה אינו מגדיל את הקובץ הסופי, מכיוון שהקדם-מעבד בודק לפני ההידור אם מוגדר המקרו, ואם לא-הוא מסיר מהקוד את הפקודות עד endif).

לדוגמה:

#include <iostream>
using namespace std;

#define WINDOWS

int main()
{
    #ifdef WINDOWS
    cout << "Windows!";
    #endif
}

אפשר לעשות גם מבנה:

#ifdef MACRO
//...
#else
//...
#endif

אם MACRO מוגדר, קטע הקוד אחרי ה-ifdef יבוצע. אם לא, קטע הקוד אחרי else יבוצע. אפשר גם לעשות ifndef - אם לא מוגדר המקרו.

pragma

הנחיה מתקדמת שמיועדת למתן הוראות כלשהן לקדם-המעבד. לכל מהדר יש הוראות pragma משלו - חפשו בתיעוד של המהדר שלכם.

התחביר:

#pragma הוראה