在使用编译器指令时,我不清楚以下两个代码片段中的哪个是正确的/首选的,以及为什么。似乎我见过的大多数开发人员和开放源代码项目都使用第一个,但是我也看到第二个项目也经常使用。
#ifdef DEBUG
[self doSomethingOnlyWhenDebugging];
#endif
与
#if DEBUG
[self doSomethingOnlyWhenDebugging];
#endif
上面哪个代码段仅在调试时才运行代码更可取,为什么?我的猜测是,如果DEBUG定义为TRUE或FALSE,则第一个将运行,而仅当DEBUG定义并设置为TRUE时,第二个才运行。那是对的吗?
最佳答案
你是对的。如果#if DEBUG
定义为DEBUG
,则0
不会评估。
至于何时使用它们,您可以坚持使用#ifdef
进行任何仅在存在预处理器定义的情况下仅需要添加代码的地方,例如添加调试日志记录。如果您需要检查值并使用不同的编译路径,则可以使用0
或1
。一个很好的例子是TARGET_IPHONE_SIMULATOR
,它始终是为iOS项目定义的,但是只有1
才可以为模拟器进行编译。