コンパイル時に様々なオプションを付すことができます。以下は 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 を無視しないことです。
[注意]文法上正しくとも,初期目的を果たさないという意味での「バグ」がない,或いはバッファ・オーバーフローやメモリ・リークが起こらない訳ではありません。これらは,プログラムを作成する側の問題として残ります。