Namensräume
Varianten
Aktionen

#define

Aus cppreference.com


Syntax:

    #define Makroname Ersatzbefehl

Der #define-Befehl wird benutzt, um Ersetzungen in der ganzen Datei, in der er steht, vorzunehmen. Der Compiler geht also die ganze Datei durch und ersetzt jedes Vorkommen des Makronamen durch dessen Ersatzbefehl. Dieser endet am Zeilenende.

Dies ist ein typischer Anwendungsfall für #define (zumindest in C):

        #define TRUE 1
        #define FALSE 0
        //...
        int done = 0;
        while(done != TRUE)
        {
                //...
        }

Eine andere Eigenschaft des #define-Befehls ist, dass er Argumente entgegennehmen kann, sodass man mit ihm Pseudo-Funktionen erstellen kann. Beispiel:

        #define absolute_value(x) (((x)<0)?-(x):(x))
        //...
        int n = -1;
        while(absolute_value(n))
        {
                //...
        }

Es ist üblicherweise eine gute Idee, die Makroparameter in Klammern zu setzen, wenn sie benutzt werden. Dadurch wird die Variable "x" vollständig evaluiert, bevor sie mit 0 verglichen oder mit -1 multipliziert wird. Außerdem ist das gesamte Makro von Klammern eingeschlossen, um zu verhindern, dass es durch angrenzenden Code "gestört" wird. Wenn der Programmierer nicht vorsichtig ist, besteht das Risiko, dass der Compiler den Code missversteht.

Hier ist ein Beispiel, wie man den #define-Befehl benutzen kann, um eine universal nutzbare for-Schleife zu definieren, die die Zahlen 1 bis 20 ausgibt.

#define count_up(v,low,high) \
        for((v) = (low); (v) <= (high); (v)++)
        //...
        int i;
        count_up(i,1,20)
        {
                printf("i = %d\n",i);
        }