パラメーターの種類に関しては、ここで既に正しい答えがありますが、コンパイラーからそれを聞きたい場合は、いくつかのフラグを追加してみてください(フラグはとにかくほとんど常に良いアイデアです)。
gcc foo.c -Wextra
I get を使用してプログラムをコンパイルする:
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.