gccでは、特定の警告で最適化を有効にする必要があります。例:gccで警告の分析を有効にするためのスイッチ
int foo() {
int x;
return x;
}
初期化されていない変数を検出するには、-Oを渡す必要があります。
$ gcc -W -Wall -c test.c
$ gcc -W -Wall -c test.c -O
test.c: In function ‘foo’:
test.c:3: warning: ‘x’ is used uninitialized in this function
しかし、これはデバッグを妨げる可能性があります。生成されたコードに多大な影響を与えることなく、警告に必要な分析フェーズ(この特定の警告だけでなく、可能な限り多く)を有効にする方法はありますか?
私はx86-64でgccバージョン4.3.3(Ubuntu 4.3.3-5ubuntu4)を使用しています。
愚かな答えは、警告の場合は-Oで、デバッグの場合はそれなしでコンパイルすることです。私は本当に良い方法があることを本当に願っています。 – Zifre
gccが-Oなしで警告を発行しない理由は、-Oなしのデータフロー分析を行わないということです。だからあなたはDFAをするように求めていますが、警告を出すためにそれらを使う以外の結果を破棄します。これは-Oでコンパイルするのと同じくらい時間がかかりますが、Zifreの提案と同じくらい長くはなりません。しかし、私はgccにそれをさせる方法は知らないし、manページはそれが不可能であることを示唆している。 –
-Oは十分に速いです、私はちょうどそれがデバッグをうんざりしないことを望んでいます。 gdbを破らず、警告分析を実行する特定の最適化フェーズを有効にする方法についての提案も歓迎します。 – bdonlan