我在XCODE项目中有一个名为LINPHONE_DEBUG的预处理器宏,在构建设置中,我将该宏设置为0,如下所示:LINPHONE_DEBUG=0.但是当我使用这个代码时
LINPHONE_DEBUG
0
LINPHONE_DEBUG=0
#if LINPHONE_DEBUG foo() #endif
foo()仍然被调用,请参见下面的屏幕截图。
foo()
您可以看到,我打印了po LINPHONE_DEBUG,它是0,但它仍然到达了代码。我正在运行XCODE 6.4 (6E35b)。
po LINPHONE_DEBUG
XCODE 6.4 (6E35b)
p5fdfcr11#
来自Swift iBook:* 将Swift与可可和Objective-C结合使用(Swift 2 Prerease)*Swift编译器不包括预处理器。相反,它利用编译时属性、构建配置和语言特性来完成相同的功能。因此,Swift中不导入预处理器指令。“构建配置Swift代码和Objective-C代码以不同的方式有条件地编译。Swift代码可以基于构建配置的评估进行有条件地编译。构建配置包括下表中列出的文本真值和假值、命令行标志和平台测试函数。您可以使用-D〈#flag#〉指定命令行标志。”有关生成配置的更多信息,请参见文档。
uqxowvwt2#
更新:此解决方案适用于目标c。你应该这样尝试:
#if LINPHONE_DEBUG > 0 foo() #endif
jv4diomz3#
您可以通过将环境配置放入结构中来避免预处理器指令。
3条答案
按热度按时间p5fdfcr11#
来自Swift iBook:* 将Swift与可可和Objective-C结合使用(Swift 2 Prerease)*
Swift编译器不包括预处理器。相反,它利用编译时属性、构建配置和语言特性来完成相同的功能。因此,Swift中不导入预处理器指令。
“构建配置Swift代码和Objective-C代码以不同的方式有条件地编译。Swift代码可以基于构建配置的评估进行有条件地编译。构建配置包括下表中列出的文本真值和假值、命令行标志和平台测试函数。您可以使用-D〈#flag#〉指定命令行标志。”
有关生成配置的更多信息,请参见文档。
uqxowvwt2#
更新:此解决方案适用于目标c。
你应该这样尝试:
jv4diomz3#
您可以通过将环境配置放入结构中来避免预处理器指令。