GCCを次のように実行すると、
gcc -O3 -O2 foo.c
GCCは、渡された最後の最適化フラグを使用します(この場合O2
)。ただし、これはすべてのフラグに当てはまりますか?たとえば、GCCを次のように実行すると、
gcc -mno-sse -msse bar.c
最後のフラグが渡されたのでSSEをサポートしますか、それとも未定義の動作になりますか?私の最初の実験は、それがSSEをサポートすることを示しているようですが、これがすべてのケースに当てはまるかどうかはわかりません。
最初の例で述べたように、通常、後の行のオプションは以前に渡されたオプションをオーバーライドします。私は個人的に、-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
この問題の解決に特に優れています。コマンドラインオプションを無視すると警告が表示され、役立つ場合があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加