2012-01-12 11 views
2

Cでは、関数宣言はプロトタイプ宣言またはプロトタイプ宣言ではありません。たとえば、以下の最小限のプログラムを検討:C99に非プロトタイプ宣言は廃止されているが、非プロトタイプ宣言のコンパイル警告の取得

int foo(); /* non-prototype declaration */ 

int bar (void); /* prototype declaration */ 

int main (int argc, char **argv) 
{ 
    return 0; 
} 

を、私はGCCがそれらについて文句を取得することはできません。例えば、GCCと上記のプログラムをコンパイルすると、すべてのエラーがちょうど成功有効:

$ gcc -std=c99 -pedantic -Werror -Wall test.c 
$ 

はプロトタイプではない関数宣言のために警告を発するようにGCCを説得する方法はありますか?

は(Keith Thompsonan answerに触発質問。)

答えて

4

私はあなたが探しているオプションは-std=c99 -pedantic -Wallオプションを持つgccは、古いスタイルの関数宣言のための警告を発行しないことを-Wstrict-prototypes

+0

私はそれが '-Wall'に含まれると考えましたが、明らかに私は間違っていました。 :-) –

1

注意だと思いますが、 Cでは、古いスタイルの関数宣言の存在下で、実装が診断を発行する必要はありません。

Cは古いスタイルの関数宣言をC89以降廃止されたものとして扱いますが、有効なCコード(C89/C99/C11)はまだ有効です。

関連する問題