C의 암시적 함수 선언
이 튜토리얼은 C의 메인 함수 위에 함수를 선언함으로써 암시적 함수 선언의 경고를 제거하는 방법에 대해 설명합니다.
C의 암시적 함수 선언
때때로 컴파일러는 C 언어에서 함수의 암시적 선언에 대한 경고를 표시합니다. 이는 함수가 main()
함수 위에 선언되지 않았거나 해당 헤더 파일이 포함되지 않았음을 의미합니다.
예를 들어 printf()
함수는 stdio.h
헤더 파일에 속하며 C 소스 파일에서 사용하기 전에 이를 포함하지 않으면 컴파일러는 함수 선언이 암시적이라는 경고를 표시합니다.
이 경우 함수 선언이 포함된 헤더 파일을 포함하거나 main()
함수 위에 함수를 선언해야 합니다. 예를 들어, 헤더 파일을 포함하지 않고 printf()
함수를 사용합시다.
아래 코드를 참조하십시오.
int main() {
int a = 10;
printf("a = %d", a);
return 0;
}
출력:
main.c: In function 'main':
main.c:5:5: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration]
5 | printf("a = %d",a);
| ^~~~~~
main.c:5:5: warning: incompatible implicit declaration of built-in function 'printf'
main.c:1:1: note: include '<stdio.h>' or provide a declaration of 'printf'
+++ |+#include <stdio.h>
1 |
a = 10
위의 출력에서 컴파일러가 printf()
함수의 선언이 암시적이며 <stdio.h>
파일을 포함하거나 다음 선언을 제공해야 한다는 경고를 표시한 것을 볼 수 있습니다. 소스 파일의 printf()
함수.
또한 a
의 값이 인쇄된 것을 볼 수 있습니다. 이는 헤더 파일을 포함하지 않았음에도 printf()
함수가 완벽하게 작동했음을 의미합니다.
이제 헤더 파일을 포함하고 위의 예를 반복해 보겠습니다. 아래 코드를 참조하십시오.
#include <stdio.h>
int main() {
int a = 10;
printf("a = %d", a);
return 0;
}
출력:
a = 10
우리는 printf()
함수에 대한 헤더 파일을 포함했기 때문에 암시적 함수 선언의 경고가 이번에는 표시되지 않음을 위에서 볼 수 있습니다.
암시적 함수 선언 경고는 소스 파일에 함수를 생성했지만 main()
함수 위에 선언하지 않은 경우에도 표시됩니다.
컴파일러는 함수 선언이 암시적이라는 것을 함수를 호출하려고 할 때 경고합니다. 예를 들어 함수를 만들고 main()
함수 위에 선언하지 않고 main()
함수에서 호출해 보겠습니다.
#include <stdio.h>
int main() {
int a = fun(2, 3);
printf("a = %d", a);
return 0;
}
int fun(int x, int p) {
int a = x + p;
return a;
}
출력:
main.c: In function 'main':
main.c:4:13: warning: implicit declaration of function 'fun' [-Wimplicit-function-declaration]
4 | int a = fun(2, 3);
| ^~~
a = 5
위의 출력에서 우리가 만든 함수에 대한 경고가 표시되는 것을 볼 수 있습니다. 이 문제를 해결하려면 main()
함수 위에 함수를 선언해야 합니다.
예를 들어 main()
함수 위에 함수를 선언하고 위의 예를 반복해 보겠습니다. 아래 코드를 참조하십시오.
#include <stdio.h>
int fun(int x, int p);
int main() {
int a = fun(2, 3);
printf("a = %d", a);
return 0;
}
int fun(int x, int p) {
int a = x + p;
return a;
}
출력:
a = 5
이제 경고가 사라진 것을 볼 수 있습니다. 헤더 파일에 함수를 선언한 다음 소스 파일에 헤더 파일을 포함할 수도 있습니다. 이는 코드를 단순화하기 때문에 많은 함수의 경우에 유용합니다.