2

私は、GCC2 から GCC4 (C コンパイラとして) への切り替えが良い考えであることを人々に納得させるためのメモを準備しています。

特に、既存のバグを明らかにできると思います。例を挙げたいと思いますが、Java プログラマーとして、このような状況の経験は限られています。1 つの例は、戻り値の型チェックだと思います。

最新のコンパイラに切り替えると、C コードに存在するバグを発見できることを示す他の説得力のある例は何ですか?

4

2 に答える 2

0

さて、バグ発見に非常に役立ついくつかのgccオプション:

  • -finstrument-functions-関数呼び出しスタックトレーサーの構築に役立ちます。特に、組み込み__builtin_return_address()スコープが現在の機能のみに制限されているアーキテクチャでは。スタックトレーサーと-Mapリンカーオプションで生成されたリンカーのシンボルファイルは、メモリリークを検出するための不可欠なツールです(Valgrindを実行できない組み込みシステムを開発する場合など)。
  • -fstack-protector-allコードがバッファ不足の場所でメモリにバイトを書き込む場所を検出するのに非常に役立ちます。したがって、このオプションはバッファオーバーフロータイプのバグを検出します。

エラー...これら2つのオプションだけを念頭に置いています。おそらく私が知らないことがもっとあります...

于 2012-03-30T11:29:44.440 に答える
0

これらの人々は、gcc2 を使用している特定のコードを持っていると思います。最善の方法は、そのコードを取得し、考えられるすべての警告をオンにして gcc4 でコンパイルし、違いを比較することです。

gcc2 と gcc4 のその他の相違点は次のとおりです。

  • コンパイル時間の短縮 (gcc4 の方がおそらく高速です)
  • はるかに優れたコード実行時間 (gcc4 は最適化に優れており、gcc2 の登場時には存在しなかった CPU アーキテクチャの知識を持っています)。
  • 警告/エラー メッセージの改善
  • gcc4 には興味深い新しい GNU C 拡張機能がいくつかあると確信しています。
于 2012-03-30T11:36:48.247 に答える