10

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

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

铿锵有类似的宏吗?我在这里的文档中找不到。

或者,更好的是,有没有一种方法可以在所有编译器上工作?

4

1 回答 1

7

__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 实现的 GNU 扩展,但 MSVC 没有。那里有一个好的等价物吗?

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

于 2013-01-31T07:12:13.753 回答