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

Tim*_*nes 9 c macros optimization clang

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

#ifndef __OPTIMIZE__
  printf("[WARNING] COMPILED WITHOUT OPTIMISATIONS\n");
#endif
Run Code Online (Sandbox Code Playgroud)

clang有类似的宏吗?我在这里的文档中找不到一个.

或者,更好的是,有没有办法在所有编译器中运行?

lbo*_*onn 5

__OPTIMIZE__宏观上也存在铛,似乎相同的方式工作在海湾合作委员会(你的例子代码工作正常).

我还没有找到关于此的具体文档,但我怀疑你链接的页面列出了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
Run Code Online (Sandbox Code Playgroud)

它适用于gcc,clang和其他一些编译器.

编辑:看起来它毕竟记录在...代码:)

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

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