19

GCCをそのまま実行すると、次のようになります。

gcc -O3 -O2 foo.c

GCC は最後に渡された最適化フラグを使用します (この場合はO2)。しかし、これはすべてのフラグに当てはまりますか? たとえば、次のように GCC を実行すると:

gcc -mno-sse -msse bar.c

それが渡された最後のフラグだったので SSE をサポートしますか、それとも未定義の動作になりますか? 私の最初の実験では、それが SSE をサポートすることを示しているようですが、これがすべての場合に当てはまるかどうかはわかりません。

4

1 に答える 1

18

最初の例で述べたように、通常、行の後のオプションは以前に渡されたオプションをオーバーライドします。-m個人的にはまたは-fフラグの異なる動作に出くわしたことはありませんが、ドキュメント内の特定の参照については知りません。

一部のオプションはこのように動作しないことに注意してください。

$ gcc example.c -DABC -DABC=12
<command-line>: warning: "ABC" redefined
<command-line>: warning: this is the location of the previous definition

-UABCしたがって、その警告を黙らせるには、その間にある必要があります。

余談ですが、clangはこの問題の解決に特に優れています。コマンド ライン オプションを無視すると警告が表示されます。

于 2013-04-09T18:33:14.653 に答える