我有一些像这样的代码:
#define FORCE_DEBUG_MODE [[[NSUserDefaults standardUserDefaults] valueForKey:@"forceDebugMode"] isEqualToString:@"1"]
#if defined DEBUG_MODE || defined FORCE_DEBUG_MODE
#define DLog( s, ... ) NSLog( @"<%p %@:(%d)> %@", self, [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )
#else
#define DLog( s, ... )
#endif
我从外面的一些文章中读到使用预处理marcos来定义DEBUG_MODE,但是如果我将NSUserDefaults值设置为某些东西,我想覆盖该模式。
这些代码没有错误。但似乎无论FORCE_DEBUG_MODE是什么,defined FORCE_DEBUG_MODE
都等于true。我想要的是FORCE_DEBUG_MODE == 1
请告诉我是否可以这样做,以及如何?
答案 0 :(得分:1)
您在支票上方定义了FORCE_DEBUG_MODE以查看它是否已定义。要检查它是否为真,那么你必须只做|| FORCE_DEBUG_MODE
,但这也总是正确的,因为只看到宏下有一些值 - 这都是在预处理器中完成的,这意味着没有这个代码将在运行时运行或重新运行 - 这些定义将定义实际编译的代码,而不是运行的代码
答案 1 :(得分:1)
#if defined
只检查是否已定义该值,而不是它的值。
您可以使用#if
检查某个值是否定义为零以外的值。
尽管如此,这仍然无效。预处理器在编译器之前运行,因此您无法在运行时使用它来切换代码。您需要在运行时检查默认值。