Bonsoir,
Soit tu utilises directement les #if #else #endif du précompilateur pour avoir une macro define proprement définie :
1 2 3 4 5
| #if X==1
#define C 15
#else
#define C 30
#endif |
Soit tu définis directement ta macro avec un paramètre et tu utilises l'opérateur ternaire :
Ta macro C sera remplacé partout dans le code par cette même expression mais comme elle n'embarque que des constantes, elle sera dans résolue dans tous les cas en sa valeur finale à la compilation.
On rappelle cependant qu'il s'agit dans les deux cas de précompilation et que ta « variable » X doit être une expression évaluable à la compilation, pas à l'exécution (autrement dit, dans pratiquement tous les cas, elle doit être elle-même une macro define).
Par contre, tu peux effectivement faire une macro paramétrée du style :
#define C(x) (x==1?15:30)
Là encore, ta macro sera développée en sa forme complète partout où tu l'as placée, mais « x » sera substitué par l'expression que tu as mise entre parenthèses. Si le compilateur peut la résoudre directement, il le fera, sinon il génèrera le code correspondant comme si tu l'avais directement tapée toi-même. Ça te permet d'utiliser éventuellement des variables définies à l'exécution.
Partager