【问题标题】:Setting OS Flag to test OS specific features设置操作系统标志以测试操作系统特定功能
【发布时间】:2016-12-15 17:44:52
【问题描述】:

为什么这不起作用(断言失败...我不希望它执行)?

#define OS_MACOSX 0

#if defined(OS_MACOSX)
    fructose_assert(1==2);
#endif

【问题讨论】:

  • 你定义了一些东西,然后检查它是否被定义,想知道为什么它会产生 true?我不明白你为什么感到困惑。

标签: c++ c-preprocessor


【解决方案1】:

因为你使用了错误的测试。

OS_MACOSX 被定义为...到0。你问它是否定义。而是询问它是否是 set:

#if OS_MACOSX
    fructose_assert(1==2);
#endif

如果它被定义为计算结果为零的东西,或者根本没有定义,#if 将跳过代码。任何非零值,且满足#if 条件并编译代码。

查看这个相关问题:Why do people use #ifdef for feature flag tests?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 2014-05-27
    相关资源
    最近更新 更多