das sind also mehr oder weniger nur Platzhalter ohne bestimmte bedeutung, so ne art TYP oder VARIABLE ohne hintergrund und bedeutung (wie z.b. integer oder das es ein array sein soll) ?
Diese Symbole werden vom Präprozessor, und nicht vom eigentlichen Compiler verarbeitet. Der Präprozessor ersetzt afaik (da die Abkürzung zur Zeit hier so gerne verwendet wird, muss ich das ja auch mal tun
) nur das Symbol, das du mit #define definiert hast, durch den Text, als den du es definiert hast.
Wenn du also zwei verschiedene Werte in Debug und Release benutzt, kannst du sie einfach als solches Symbol definieren:
Du schreibst den Text:
|
Quellcode
|
1
2
3
4
5
6
7
|
#ifdef _DEBUG
#define MEIN_SYMBOL "debug-text"
#else
#define MEIN_SYMBOL "release-text"
#endif
char mein_string[] = MEIN_SYMBOL;
|
Der Präprozessor macht daraus im Debug-Modus:
|
Quellcode
|
1
|
char mein_string[] = "debug-text";
|
und im Release-Modus:
|
Quellcode
|
1
|
char mein_string[] = "release-text";
|
Dies funktioniert einzig auf Textbasis - der Präprozessor hat also von typen, variablen, konstanten etc. gar keine Ahnung, sondern ersetzt im Code nur definierte Symbole durch den ihnen zugewiesenen Text.
Der Compiler hingegen weiß gar nicht, was vor dem Durchlauf des Präprozessors im Code stand.