コンパイル時に様々なオプションを付すことができます。以下は gcc
におけるオプションの一部です。
* 詳しくは,gcc
のマニュアルを。Win32 用 Borland の場合,オプションを付さなくとも warning が出る。
-Wunused | 未使用の変数をチェック |
-Wreturn-type | 関数の返却値と型の整合性 [例] main 関数の終了が exit 関数,或いは return 文でないと次の warning が出る。control reaches end of non-void function |
-Wformat | printf や scanf の変換指定子のチェック |
-Wimplict | 関数や引数の暗黙的宣言のチェック |
-Wuninitialiezed | 変数の初期化チェック(但し,最適化用オプション利用時) |
-Wall | 上記オプションを含む warning用オプションのすべて。 どのオプションが含まれるかはコンパイラのマニュアルを。 |
-O | 処理の最適化。最適化については,他のオプション -O2 などあり。どのような最適化が行われるかはコンパイラのマニュアルを。 |
-o | 実行ファイル名を指定。 |
-c | オブジェクトファイルの生成。 |
-S | 翻訳処理のみ。アセンブリ言語ファイルが生成される。 |
-ansi ,-std=c89 | ANSI C (C89)/ISO C90 準拠でのコンパイル。 |
-std=c99 | C99 準拠でのコンパイル。但し,gcc 3.3.1 の段階で, "GCC has incomplete support for this standard version." となっている。 C.f. gcc の C99 への対応状況。 |
-pedantic | CXX に従った診断。-std=cXX と一緒に使う。 |
文法チェックをしたいのであれば,-Wall
オプションを使用すれば良いでしょう。エラーだけでなく warning(注意)が出なくなるまでプログラムを書き直します。
% cc -O -Wall xxx.c
* lint
という文法チェッカもあります。但し,ISO による規格がある現在,コンパイラはその規格に従って作られることが要求されるため,コンパイラが出す warning を無視しないことです。
[注意]文法上正しくとも,初期目的を果たさないという意味での「バグ」がない,或いはバッファ・オーバーフローやメモリ・リークが起こらない訳ではありません。これらは,プログラムを作成する側の問題として残ります。