실제로 여러 파일로 컴파일하고있었습니다. 파일은 다음과 같습니다다른 c 파일의 함수 호출
main.c 파일 ->
#include <stdio.h>
void foo3(void)
{
printf("INSIDE foo3 function\n");
}
int main()
{
foo1();
foo2();
foo3();
}
파일 1.C ->
#include <stdio.h>
void foo1(void)
{
printf("INSIDE foo1 function\n");
}
파일 2.C ->
#include <stdio.h>
void foo2(void)
{
printf("INSIDE foo2 function\n");
}
다음과 같이 gcc를 사용하여 컴파일했습니다. ->
gcc 1.c 2.c main.c -o main
다음은 출력했다 ->
INSIDE foo1 function
INSIDE foo2 function
INSIDE foo3 function
내 의심의 여지가 그들이 main.c
에 선언되지 않은 경우 main
() foo1()
및 foo2()
를 호출 할 수있는 방법입니다. 하지만 지금과 같이 (main()
후 foo3()
의 정의를 작성) 다음과 같이 내가 main.c를 변경하는 경우 :
편집을 main.c를 ->
#include <stdio.h>
int main()
{
foo1();
foo2();
foo3();
}
void foo3(void)
{
printf("INSIDE foo3 function\n");
}
및
다음 나는이 오류가 컴파일하는 경우 :main.c:9:6: warning: conflicting types for ‘foo3’ [enabled by default]
void foo3(void)
^
main.c:6:2: note: previous implicit declaration of ‘foo3’ was here
foo3();
^
왜이 오류가
foo1()
및
foo2()
의 경우 이전에 표시되지 않았습니다. 미리 감사드립니다.
귀중한 정보를 위해 thankyou. 한 가지 더 의심 스럽다. main.c에서 이전에 선언하지 않은 foo3()과 같이 main()에서 처음으로 나타나는 경우 foo2() 및 foo1()에 대해 충돌하는 유형 경고가 표시되지 않는 이유는 무엇입니까? – Akhil
링크 시간 최적화가 필요합니다. 그러나 중요한 것은 헤더 파일을 작성하고 사용하는 습관을 갖고 거기에 모든 공개 된 것을 선언하는 것입니다. –
오케이. main.c 컴파일은 foo3.c의 경고를 보여줄 뿐이며 main.c 내에서만 정의 된 함수이기 때문입니다. 따라서 위의 foo3()에 대한 경고는 main.c에서 유일한 경고이며 다른 함수는 main.c의 컴파일 중에 int 유형을 반환한다고 가정하므로 main()의 컴파일 중에 정의가 발생하지 않으므로 경고가 발생하지 않습니다. .기음. 귀중한 지원에 감사드립니다. – Akhil