我在我的应用程序中添加了一些调试代码,我只想在需要时调用它。我记得有一些IFDEF
可以用来有条件地将代码包含在源文件中。
例如,我可能会有这样的事情:
IFDEF kDebugEnabled == YES {
// some debugging code here
}
然后,如果kDebugEnabled为YES,那么这段代码只会编译成二进制文件。
我该怎么办?
请注意:我不想使用项目编译器标志设置。我只是想定义一个BOOL(或者同样有用的东西),这是真或假,然后只需在我的App Delegate中轻松设置它。我发现很难导航到项目编译器设置,搜索标志然后设置它。我知道有一个可能有用的Debug标志。
答案 0 :(得分:5)
您正在寻找的是:
#ifdef __YOURSYMBOL__
<conditional code>
#endif
您可以通过编程方式定义__YOURSYMBOL__
,如下所示:
#define __YOURSYMBOL__
__YOURSYMBOL__
可以是任何有意义的字符串,以便您记住为什么要包含/排除该代码段。
DEBUG
常量是一个特殊的预处理器常量,编译器在为调试构建代码时专门为您定义,因此您只需使用它:
#ifdef DEBUG
<conditional code>
#endif
考虑到这是C预处理器,而不是C,也没有使用Objective-C,因此像kDebugEnabled == YES
(其中kDebugEnabled是Objective-C变量)这样的测试是不可能的。您可以为常量定义整数值,如下所示:
#define __LOG_LEVEL__ 3
然后测试它:
#if __LOG_LEVEL__ == 3
...
Endif
答案 1 :(得分:3)
据我所知,如果不使用编译器标志,则不能在类中编译未编译到最终产品中的代码。但是,使用DEBUG标志比您想象的容易得多。如果您使用的是Xcode 4,默认情况下会为您设置。
#ifdef DEBUG
// Your debug-only code goes here
#endif // DEBUG
默认情况下,Xcode有两种配置Debug
和Release
。当您使用调试版本配置时,它会设置DEBUG编译器标志,然后您可以使用它来有条件地编译代码。根本不需要弄乱编译设置。