【问题标题】:What is the difference between -DNDEBUG and -DNS_BLOCK_ASSERTIONS flags-DNDEBUG 和 -DNS_BLOCK_ASSERTIONS 标志有什么区别
【发布时间】:2015-11-13 11:18:38
【问题描述】:

我尝试了FauxPas 源代码分析器,它显示我缺少-DNDEBUG 标志,并带有下一个描述:

此参数禁用 C 标准库断言宏(如 在 assert.h) 中定义。

不过,当我检查我的构建设置时,我发现描述标志 -DNS_BLOCK_ASSERTIONS=1 非常相似。

所以我现在想知道。我真的需要FauxPas 建议的旗帜,还是我可以接受?

【问题讨论】:

    标签: objective-c xcode build-settings


    【解决方案1】:

    NDEBUG 禁用 assert(),这是 C 标准库的一部分。 NS_BLOCK_ASSERTIONS 禁用 NSAssert(),它是 Foundation 的一部分。如果您的代码中有两种类型的断言,则通常需要两者。

    【讨论】:

    • 你写了NDEBUG,但我问DNDEBUG是一样的吗?
    • 第一个 -D 用于“定义”。 -DNDEBUG 表示“定义 NDEBUG”
    • 那么“定义”如何影响DNDEBUG?就像说定义禁用断言()?
    • @gfdsal 正确。它创建一个值为 1 的预处理器宏 NDEBUG
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 2018-10-21
    • 1970-01-01
    • 2012-05-15
    相关资源
    最近更新 更多