当使用 gcc 编译时,__OPTIMIZE__
宏在优化开启时定义(见这里)。这会启用运行时警告,如下所示:
#ifndef __OPTIMIZE__
printf("[WARNING] COMPILED WITHOUT OPTIMISATIONS\n");
#endif
铿锵有类似的宏吗?我在这里的文档中找不到。
或者,更好的是,有没有一种方法可以在所有编译器上工作?
该__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 没有。那里有一个好的等价物吗?