このプログラム
int main()
{
int a, b;
a = b;
return 0;
}
でコンパイルすると、警告やエラーなしでコンパイルされます
g++ -Wall test.cpp
ただし、同じ警告レベルであっても、最適化をオンにしてコンパイルすると
g++ -Wall -Os test.cpp
次に、初期化されていない変数を使用していると文句を言い始めます。
(注:実際のプログラムは少し長く、この小さな例ほど明確に問題を明らかにしていません。)
グーグルで検索しようとしましたが、正しい検索用語を使用していないか、これは既知の現象ではありません。とにかく、私の質問は基本的に
- 同じ警告レベルであっても、コンパイラがこの警告を-Osで表示し、-O0では表示しないのはなぜですか?(どちらかといえば、変数を完全に最適化することができ、問題がなくなるので、この小さな例では逆になると思います。)
- このような予期しない警告をトリガーする他のコンパイラオプションはありますか?私は自分のプログラムをバグフリーにすることに興味があるので、それらすべてを見るのが好きです!
- これは既知の機能ですか?もしそうなら、どこでそれを見つけることができますか?検索してみました。
- それとも、これは私の特定のバージョンのコンパイラ(gcc 4.3.2-1.1、Linux、32ビット)の単なる不具合ですか?