パラメータタイプに関しては、ここにすでに正しい答えがありますが、コンパイラからそれを聞きたい場合は、いくつかのフラグを追加してみることができます(フラグはとにかくほとんどの場合良い考えです)。
Igetを使用してプログラムをコンパイルしますgcc foo.c -Wextra
。
foo.c: In function ‘func’:
foo.c:5:5: warning: type of ‘param’ defaults to ‘int’ [-Wmissing-parameter-type]
奇妙な-Wextra
ことに、これをキャッチしません(何らかの理由で、おそらく上記の歴史的なものをclang
認識しません)が、 :-Wmissing-parameter-type
-pedantic
foo.c:5:10: warning: parameter 'param' was not declared,
defaulting to type 'int' [-pedantic]
int func(param)
^
1 warning generated.
また、プロトタイプの問題については、上記で再度述べたようint func()
に、明示的に定義しない限り、任意のパラメーターを参照します。int func(void)
これにより、期待どおりのエラーが発生します。
foo.c: In function ‘func’:
foo.c:6:1: error: number of arguments doesn’t match prototype
foo.c:3:5: error: prototype declaration
foo.c: In function ‘main’:
foo.c:12:5: error: too many arguments to function ‘func’
foo.c:5:5: note: declared here
またはclang
として:
foo.c:5:5: error: conflicting types for 'func'
int func(param)
^
foo.c:3:5: note: previous declaration is here
int func(void);
^
foo.c:12:20: error: too many arguments to function call, expected 0, have 1
int bla = func(10);
~~~~ ^~
foo.c:3:1: note: 'func' declared here
int func(void);
^
2 errors generated.