ios XCode预处理器宏#如果仍包含与符号定义为0相反的代码

f8rj6qna  于 2023-02-01  发布在  iOS
关注(0)|答案(3)|浏览(128)

我在XCODE项目中有一个名为LINPHONE_DEBUG的预处理器宏,在构建设置中,我将该宏设置为0,如下所示:LINPHONE_DEBUG=0.
但是当我使用这个代码时

#if LINPHONE_DEBUG
    foo()
#endif

foo()仍然被调用,请参见下面的屏幕截图。

您可以看到,我打印了po LINPHONE_DEBUG,它是0,但它仍然到达了代码。
我正在运行XCODE 6.4 (6E35b)

p5fdfcr1

p5fdfcr11#

来自Swift iBook:* 将Swift与可可和Objective-C结合使用(Swift 2 Prerease)*
Swift编译器不包括预处理器。相反,它利用编译时属性、构建配置和语言特性来完成相同的功能。因此,Swift中不导入预处理器指令。
“构建配置Swift代码和Objective-C代码以不同的方式有条件地编译。Swift代码可以基于构建配置的评估进行有条件地编译。构建配置包括下表中列出的文本真值和假值、命令行标志和平台测试函数。您可以使用-D〈#flag#〉指定命令行标志。”
有关生成配置的更多信息,请参见文档。

uqxowvwt

uqxowvwt2#

更新:此解决方案适用于目标c。
你应该这样尝试:

#if LINPHONE_DEBUG > 0
    foo()
#endif
jv4diomz

jv4diomz3#

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

相关问题