2013-08-30 18 views
7

Sto tentando di disabilitare i rapporti dei registri di arresti anomali automatici quando sono impostate una o entrambe le due definizioni: DEBUG per le nostre build di debug e INTERNATIONAL per le versioni internazionali. Quando provo a farlo nel caso #ifndef, tuttavia, ricevo l'avviso Extra tokens at end of #ifndef directive e l'esecuzione con DEBUG definita attiverà Crittercism.Compilazione condizionale con ifndef e || non cattura il secondo caso

#ifndef defined(INTERNATIONAL) || defined(DEBUG) 
    // WE NEED TO REGISTER WITH THE CRITTERCISM APP ID ON THE CRITTERCISM WEB PORTAL 
    [Crittercism enableWithAppID:@"hahayoudidntthinkidleavetherealonedidyou"]; 
#else 
    DDLogInfo(@"Crash log reporting is unavailable in the international build"); 

    // Since Crittercism is disabled for international builds, go ahead and 
    // registers our custom exception handler. It's not as good sadly 
    NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler); 
    DDLogInfo(@"Registered exception handler"); 
#endif 

Questa tabella di verità mostra quello che mi aspetto:

INTL defined | DEBUG defined | Crittercism Enabled 
    F  |  F  | T 
    F  |  T  | F 
    T  |  F  | F 
    T  |  T  | F 

Ciò ha funzionato prima, quando era solo #ifndef INTERNATIONAL. Ho anche provato senza lo defined(blah) e con parentesi attorno all'intera istruzione (lo stesso avviso e un errore rispettivamente).

Come si ottiene il comportamento desiderato dal compilatore?

risposta

13

desiderato:

#if !defined(INTERNATIONAL) && !defined(DEBUG) 
    // neither defined - setup Crittercism 
#else 
    // one or both defined 
#endif 

o si può fare:

#if defined(INTERNATIONAL) || defined(DEBUG) 
    // one or both defined 
#else 
    // neither defined - setup Crittercism 
#endif 
+0

Questo risolve, grazie. Sai se c'è qualcosa su '# ifndef' che impedisce condizionali complessi? – thegrinner

+0

Non è possibile combinare '# ifdef' o' # ifndef' con 'defined()'. E '# ifdef' e' # ifndef' possono solo controllare un singolo valore - '#ifndef INTERNATIONAL'. – rmaddy

Problemi correlati