빠른 대답 : 변화 int testlib()
로는 int testlib(void)
함수가 인수를 취하지 않는 것을 지정합니다.
프로토 타입 정의 함수 선언입니다 함수의 인수 (들)의 지정 유형 (들).
프로토 타입이 아닌 함수 선언
int foo();
인수의 수 또는 유형을 지정하지 않는 구식 선언입니다. (1989 ANSI C 표준 이전에는 언어에서 사용 가능한 유일한 함수 선언이었습니다.) 임의의 수의 인수를 사용하여 이러한 함수를 호출 할 수 있으며 컴파일러는 불평 할 필요가 없습니다. call 정의 와 일치하지 않습니다. 프로그램에 정의되지 않은 동작이 있습니다.
하나 이상의 인수를받는 함수의 경우 선언에서 각 인수의 유형을 지정할 수 있습니다.
int bar(int x, double y);
인수가없는 함수는 특별한 경우입니다. 논리적으로, 빈 괄호는 인수가 있지만 구식 함수 선언에 해당 구문이 이미 사용 중임을 지정하는 좋은 방법이었을 것이므로 ANSI C위원회는 void
키워드를 사용하여 새로운 구문을 발명했습니다 .
int foo(void); /* foo takes no arguments */
함수 정의 (함수가 실제로 수행하는 코드 포함)도 선언을 제공합니다 . 귀하의 경우 다음과 비슷한 것이 있습니다.
int testlib()
{
/* code that implements testlib */
}
에 대한 비 프로토 타입 선언을 제공합니다 testlib
. 정의로서 이것은 testlib
매개 변수가없는 컴파일러에 알리지 만 선언으로 testlib
지정되지는 않지만 고정 된 수와 유형의 인수 를 취하는 컴파일러에만 지시합니다 .
당신이 변경하는 경우 ()
에 (void)
선언 프로토 타입이된다.
프로토 타입의 장점은 실수 testlib
로 하나 이상의 인수 로 호출 하면 컴파일러가 오류를 진단한다는 것입니다.
(C ++에는 약간 다른 규칙이 있습니다. C ++에는 구식 함수 선언이 없으며 빈 괄호는 특히 함수가 인수를 취하지 않음을 의미합니다. C ++는 C (void)
와의 일관성을 위해 구문을 지원합니다 . C와 C ++로 아마도 ()
C ++에서와 C에서 (void)
구문을 사용해야합니다 .)