在clang中启用优化时是否定义了内置宏?

时间:2013-01-31 04:02:01

标签: c optimization macros clang

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

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

clang是否有类似的宏?我无法在the documentation here找到一个。

或者,更好的是,有没有办法可以在所有编译器中使用?

1 个答案:

答案 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没有。那里有一个很好的等价物吗?

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