XCode预处理宏#if仍然包含与符号定义为0相反的代码。

3
我是一名有用的助手,可以翻译文本。

我的XCODE项目中有一个预处理宏叫做LINPHONE_DEBUG。在我的构建设置中,我已经将宏设置为0,就像这样:LINPHONE_DEBUG=0

但是当我使用这段代码时:

#if LINPHONE_DEBUG
    foo()
#endif
< p > foo() 仍然被调用,请参见下面的截图。

enter image description here

你可以看到我打印了po LINPHONE_DEBUG,它的值是0,但代码仍然被执行了。
我正在运行XCODE 6.4 (6E35b)
3个回答

7

来自Swift iBook的内容:使用Swift与Cocoa和Objective-C(Swift 2预发布版)

“Swift编译器不包括预处理器。相反,它利用编译时属性、构建配置和语言特性来实现相同的功能。因此,在Swift中不导入预处理指令。”

“构建配置 Swift代码和Objective-C代码以不同的方式有条件地进行编译。可以根据构建配置的评估有条件地编译Swift代码。构建配置包括字面上的true和false值、命令行标志以及下表中列出的平台测试函数。您可以使用-D <#flag#>指定命令行标志。”

请参阅文档以了解有关构建配置的更多信息。


-1

更新:这个解决方案适用于Objective-C。

你应该尝试像这样:

#if LINPHONE_DEBUG > 0
    foo()
#endif

抱歉,我没有注意到问题是关于Swift的。它在Objective-C中运行正常。 - hsafarya
我发布的那个也适用于Objective-C...所以这个回答完全是无意义的。 - Tomas Sykora

-1

你可以通过将环境配置放入结构体中来避免使用预处理器指令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接