【问题标题】:Is there a builtin macro defined when optimisation is enabled in clang?在clang中启用优化时是否定义了内置宏?
【发布时间】:2013-01-31 04:02:01
【问题描述】:

当使用 gcc 编译时,__OPTIMIZE__ 宏在优化开启时定义(参见here)。这会启用运行时警告,如下所示:

#ifndef __OPTIMIZE__
  printf("[WARNING] COMPILED WITHOUT OPTIMISATIONS\n");
#endif

clang 有类似的宏吗?我在the documentation here 中找不到。

或者,更好的是,有没有一种适用于所有编译器的方法?

【问题讨论】:

    标签: c optimization macros clang


    【解决方案1】:

    __OPTIMIZE__ 宏也存在于 clang 中,并且似乎与 gcc 中的工作方式相同(您的示例代码工作正常)。

    我还没有找到关于此的具体文档,但我怀疑您链接的页面列出了 gcc 未采用的一些特定于 clang 的宏。 编辑:这并不完全正确,因为__COUNTER__ 也存在于 gcc 中。

    我猜这件事落入了clang的“使命”,就是尽可能兼容gcc:

    Clang 驱动程序和语言功能经过精心设计,尽可能与 GNU GCC 编译器兼容,从而简化了从 GCC 到 Clang 的迁移。在大多数情况下,代码“正常工作”。

    来源:http://clang.llvm.org/docs/UsersManual.html#id4

    此外,这个小命令对于列出编译器使用的宏很有用:

    cc -dM -E -x c [options] /dev/null
    

    它适用于 gcc、clang 和其他一些编译器。

    编辑:看起来它毕竟已经记录在案了......在代码中:)

    __OPTIMIZE__ 是 Clang 实现但 MSVC 没有实现的 GNU 扩展。那里有很好的等价物吗?

    来源:https://github.com/llvm-mirror/clang/blob/master/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h#L84

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-30
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多