当设置了两个定义中的一个或两个时,我试图禁用自动崩溃日志报告:DEBUG
对于我们的调试版本和INTERNATIONAL
国际版本。但是,当我在这种情况下尝试这样做#ifndef
时,我会收到警告Extra tokens at end of #ifndef directive
,并且以DEBUG
定义的方式运行将触发 Crittercism。
#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
这个真值表显示了我的期望:
INTL defined | DEBUG defined | Crittercism Enabled
F | F | T
F | T | F
T | F | F
T | T | F
这在它只是#ifndef INTERNATIONAL
. 我也试过defined(blah)
在整个语句周围不带括号(分别是相同的警告和错误)。
如何从编译器获得我想要的行为?