10

gccでコンパイルする__OPTIMIZE__場合、最適化がオンになっているときにマクロが定義されます(ここを参照)。これにより、次のような実行時の警告が有効になります。

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

clangに同様のマクロはありますか?こちらのドキュメントで見つかりませんでした。

または、さらに良いことに、すべてのコンパイラで機能するこれを行う方法はありますか?

4

1 に答える 1

7

マクロは__OPTIMIZE__clangにも存在し、gccと同じように機能するようです(サンプルコードは正常に機能します)。

これに関する具体的なドキュメントはまだ見つかりませんが、リンクしたページに、gccで採用されていないclang固有のマクロがいくつかリストされていると思われます。編集__COUNTER__: gccにも存在するので、これは厳密には真実ではありません。

この問題は、gccと可能な限り互換性があるというclangの「使命」に該当すると思います。

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 に答える