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?
Questo risolve, grazie. Sai se c'è qualcosa su '# ifndef' che impedisce condizionali complessi? – thegrinner
Non è possibile combinare '# ifdef' o' # ifndef' con 'defined()'. E '# ifdef' e' # ifndef' possono solo controllare un singolo valore - '#ifndef INTERNATIONAL'. – rmaddy