Non è chiaro per me quando si utilizzano le direttive del compilatore quali dei seguenti due frammenti di codice sono corrette/preferite e perché. Sembra che la maggior parte degli sviluppatori e dei progetti Open Source che ho visto utilizzino la prima, ma ho visto anche la seconda usata frequentemente.#ifdef DEBUG versus #if DEBUG
#ifdef DEBUG
[self doSomethingOnlyWhenDebugging];
#endif
VERSUS
#if DEBUG
[self doSomethingOnlyWhenDebugging];
#endif
Quale dei frammenti di codice di cui sopra è preferibile per l'esecuzione di codice solo durante il debug e perché? La mia ipotesi è che il primo verrà eseguito se DEBUG è definito come VERO o FALSO in cui il secondo verrà eseguito solo se DEBUG è definito e impostato su TRUE. È corretto?
'# ifdef' semplicemente verifica se il simbolo è stato definito.'# se' verifica il VALORE del simbolo. quindi '#define FOO 0' farà sì che' #ifdef FOO' sia vero, ma '#if FOO' è falso, perché sta facendo' #if 0'. –
Si dovrebbe tentare di trovare la definizione "radice" e determinare se il valore deve essere un valore 1/0 o uno presente/assente. Il fatto di sbagliare può avere conseguenze "inaspettate". –