( asch | 2019. 09. 28., szo - 14:45 )

A #define-t precomplier dolgozza fel, "buta" stringmanipuláció alapú lecseréléssel dolgozik, a konkrét számértéket írja be mindenhova, ahol megtalálja a kulcsszó előfordulását.

A #define ezért mindennél "erősebb", mivel a fordítás előtti lépésben fut le. Ha ilyen van:

#define ONE 1

enum {
ONE
}

Akkor az a precompiler után ez lesz, és ez C nyelven értelmetlen, ez lesz a fordítási hiba:

enum {
1
}

Érdemes néha ránézni a precompiler kimenetére, amit a legtöbb fordító ki tud adni magából. Ez bár nehezen olvasható, de legalább meg lehet benne találni az ilyen hibákat: pl gcc -E.

Komolyabb helyeken a #define használata emiatt tilos is, mert nagyon könnyű öngyilkos aknákat csinálni vele.