使用gcc进行编译时,会在启用优化时定义__OPTIMIZE__
宏(请参阅here)。这将启用运行时警告,如下所示:
#ifndef __OPTIMIZE__
printf("[WARNING] COMPILED WITHOUT OPTIMISATIONS\n");
#endif
clang是否有类似的宏?我无法在the documentation here找到一个。
或者,更好的是,有没有办法可以在所有编译器中使用?
答案 0 :(得分:5)
__OPTIMIZE__
宏也存在于clang上,似乎与gcc中的工作方式相同(您的示例代码可以正常工作)。
我还没有找到关于此的具体文档,但我怀疑你链接的页面列出了gcc未采用的一些特定于clang的宏。 修改:这并非严格正确,因为gcc中也存在__COUNTER__
。
我想这个问题属于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没有。那里有一个很好的等价物吗?