매개 변수 유형과 관련하여 이미 올바른 답변이 있지만 컴파일러에서 듣고 싶다면 플래그를 추가 할 수 있습니다 (플래그는 거의 항상 좋은 생각입니다).
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.