使用编译器指令时,我不清楚以下两个代码片段中的哪一个是正确的/首选的以及为什么。看来,我见过的大多数开发人员和开源项目都使用第一个,但我也看到了第二个频繁使用的项目。#ifdef调试与#if调试
#ifdef DEBUG
[self doSomethingOnlyWhenDebugging];
#endif
VERSUS
#if DEBUG
[self doSomethingOnlyWhenDebugging];
#endif
这上面的代码片段的最好运行代码只在调试时,为什么?我的猜测是,如果DEBUG被定义为TRUE或FALSE,第一个将运行,其中第二个只有在DEBUG被定义并设置为TRUE时才会运行。那是对的吗?
'#ifdef'只是测试符号是否已被定义。'#if'测试符号的VALUE。所以'#define FOO 0'将使'#ifdef FOO'为真,但'#if FOO'为假,因为它正在执行'#if 0'。 – 2013-04-26 21:43:46
您应该尝试查找“根”定义并确定该值是打算成为1/0值还是当前/不存在的值。让他们错误可能会产生“意想不到的”后果。 – 2013-04-26 21:47:14