lid*_*ker 50 xcode objective-c ios
在使用编译器指令时,我不清楚以下两个代码片段中哪些是正确/首选的,为什么.似乎我见过的大多数开发人员和开源项目都使用了第一个,但我也看到了第二个经常使用的项目.
#ifdef DEBUG
[self doSomethingOnlyWhenDebugging];
#endif
Run Code Online (Sandbox Code Playgroud)
与
#if DEBUG
[self doSomethingOnlyWhenDebugging];
#endif
Run Code Online (Sandbox Code Playgroud)
以上哪个代码片段最适合在调试时运行代码,为什么?我的猜测是,如果将DEBUG定义为TRUE或FALSE,则第一个将运行,其中第二个将仅在定义DEBUG并设置为TRUE时运行.那是对的吗?
Jef*_*ley 39
你是对的.#if DEBUG
不会评估是否DEBUG
定义为0
.
至于何时使用每个,如果存在预处理器定义,您可以坚持使用#ifdef
只需要添加代码的任何内容,例如添加调试日志记录.如果你需要检查值并沿着不同的编译路径,那么我会使用0
或1
.一个很好的例子是TARGET_IPHONE_SIMULATOR
,它总是为iOS项目定义,但前提1
是你正在为模拟器进行编译.
据我所知,最好的选择是:
#ifndef DEBUG
NSLog(@"-1");
#elif DEBUG == 0
NSLog(@"0");
#else
NSLog(@"%d", DEBUG);
#endif
Run Code Online (Sandbox Code Playgroud)
那么,你会知道#ifndef DEBUG
比其他所有人更受欢迎.有一个更简单的选择:
#if DEBUG == 0 // DEBUG is not defined or defined to be 0
// do sth
#else
// do sth
#endif
Run Code Online (Sandbox Code Playgroud)
但是,如果-Wundef编译器标志是,有可能是一个警告,有#if DEBUG == 0
.
归档时间: |
|
查看次数: |
43862 次 |
最近记录: |