다음은 두 개의 개별 파일 Test1.c와 Test2.c로 작성된 두 개의 별도 코드입니다. 어떤 파일에서든지 extern
키워드를 사용하고 있지 않습니다. GCC를 사용하여 코드를 컴파일왜 'extern'을 사용하지 않더라도 GCC가 두 파일을 컴파일하고 연결하는 이유는 무엇입니까?
//Test1.c
#include <stdio.h>
int a = 1;
int main()
{
printf("test1 - a val = %d\n",a);
fn();
printf("After Return : %d",a);
}
//Test2.c
#include <stdio.h>
int a;
int fn()
{
printf("test2 - a val = %d\n",a);
a++;
}
I : 이것은 다음과 같은 출력을 생성
gcc Test1.c Test2.c
:
test1 - a val = 1
test2 - a val = 1
나는 두 코드 가변 a
주소를 인쇄하려고. 주소도 같습니다.
지금은 다음 한 질문 : gcc
자동 컴파일 및 링크도 extern
경우 하는가
- 를 사용하지 ?? 여기 분명히
gcc
내부적으로 나는이 두 파일을 함께 컴파일하고 있습니다. - 이 동작은/않고
extern
키워드는 컴파일러 종속적입니까?
엄격하게 준수하지는 않습니다. 표준의 Annex J에 문서화 된 '일반적인 확장'입니다. [C에서 소스 파일간에 변수를 공유하는 데 'extern'을 사용하려면 어떻게합니까?] (http://stackoverflow.com/questions/1433204/)의 '전역 변수를 정의하는 좋은 방법'섹션을 참조하십시오. –
다음으로 컴파일하십시오. '-fno-common' 옵션. –
@JonathanLeffler이 질문과 어떻게 중복 될 수 있습니까?제 질문은 gcc 컴파일러로 extern의 동작에 관한 것입니다. –