私は、GCC2 から GCC4 (C コンパイラとして) への切り替えが良い考えであることを人々に納得させるためのメモを準備しています。
特に、既存のバグを明らかにできると思います。例を挙げたいと思いますが、Java プログラマーとして、このような状況の経験は限られています。1 つの例は、戻り値の型チェックだと思います。
最新のコンパイラに切り替えると、C コードに存在するバグを発見できることを示す他の説得力のある例は何ですか?
さて、バグ発見に非常に役立ついくつかのgccオプション:
-finstrument-functions
-関数呼び出しスタックトレーサーの構築に役立ちます。特に、組み込み__builtin_return_address()
スコープが現在の機能のみに制限されているアーキテクチャでは。スタックトレーサーと-Map
リンカーオプションで生成されたリンカーのシンボルファイルは、メモリリークを検出するための不可欠なツールです(Valgrindを実行できない組み込みシステムを開発する場合など)。-fstack-protector-all
コードがバッファ不足の場所でメモリにバイトを書き込む場所を検出するのに非常に役立ちます。したがって、このオプションはバッファオーバーフロータイプのバグを検出します。エラー...これら2つのオプションだけを念頭に置いています。おそらく私が知らないことがもっとあります...
これらの人々は、gcc2 を使用している特定のコードを持っていると思います。最善の方法は、そのコードを取得し、考えられるすべての警告をオンにして gcc4 でコンパイルし、違いを比較することです。
gcc2 と gcc4 のその他の相違点は次のとおりです。