gcc(4.4.6)に-O2 -Wallフラグを追加した後の警告コードを消去します。 私はいくつかのレガシーコードで多くの警告を受けています。これは、問題を実証するための非常に単純化したバージョンです:gcc - removal "はこの関数で初期化されていません"警告
1 #include <cstdio>
2
3 bool init(bool& a)
4 {
5 return true;
6 }
7
8 int main()
9 {
10 bool a;
11
12 if (!init(a))
13 {
14 return 1;
15 }
16
17 if (a)
18 {
19 printf("ok\n");
20 }
21 }
私が受け取る "gccのmain.cppに-O2 -Wall" としてそれをコンパイルする場合:実際のコードで
main.cpp:17: warning: `a' is used uninitialized in this function
をと、init()がtrueを返します"a"を初期化する場合に限り、初期化されていない "a"によって仮想的に使用されることはありません。
警告を修正するためにWhanを実行できます。
に-Wno-初期化されていない追加しますか? UBプログラムがなぜ機能しないのかを理解したいときは、後でSOに戻ってきますか? – DanielKO