Ho la seguente macro:C preprocessore con if
#define IF_TRACE_ENABLED(level) if (IsTraceEnabled(level))
Il codice utente deve cercare seguente:
IF_TRACE_ENABLED(LEVEL1)
{
... some very smart code
}
L'enfasi sulla parentesi graffe - Voglio evitare che "se" da macro per "mangiare" altro codice:
if (...)
IF_TRACE_ENABLED(LEVEL1)
printf(....);
else
bla bla bla
In questo esempio IF_TRACE_ENABLED
"mangia" blocco else.
C'è modo di far rispettare il codice utente non compilato senza freni ricci o ce ne sono altri per definire la macro per raggiungere la sicurezza?
Non riesco a vedere che cosa ti dà questa macro oltre la semplice istruzione. – JeremyP
Dimentica questo esempio. Potresti avere una condizione complicata in quel 'se' che non vuoi ripetere ogni volta. –
@JeremyP: non c'è molta utilità nell'avere una macro per questo semplice esempio, ma come indica Nathan è possibile che ci possa essere più complessità nella macro di debug e/o che ci siano diverse varianti della macro basate sulla configurazione di build (per esempio, una versione di versione che valuta sempre 'false' in modo che le stringhe di traccia vengano eliminate dall'eseguibile). –