C 언어에서 extern 수정자는 변수나 함수 선언 앞에 사용되어 "이 변수/함수는 다른 곳에 정의되어 있으며 여기에서 참조되어야 함"을 나타냅니다.
1. 외부 수정 변수 선언. 예를 들어 파일 a.c가 b.c의 변수 int v를 참조해야 하는 경우 a.c에서 extern int v를 선언한 다음 변수 v를 참조할 수 있습니다. 여기서 주목해야 할 점은 참조되는 변수 v의 링크 속성이 외부 링크(external)여야 한다는 것입니다. 즉, a.c가 v를 참조하려면 a.c에서 extern int v의 선언에만 의존하는 것이 아니라, 그러나 변수 v 자체에 따라 달라질 수도 있습니다. 여기에는 C 언어의 또 다른 주제인 변수 범위가 포함됩니다. extern 수정자를 사용하여 다른 모듈에서 참조할 수 있는 변수는 일반적으로 전역 변수입니다. 또 다른 매우 중요한 점은 extern int v가 a.c의 어느 위치에나 배치될 수 있다는 것입니다. 예를 들어 a.c에서 fun 함수 정의의 시작 부분에 extern int v를 선언한 다음 변수 v를 참조할 수 있습니다. 그게 전부입니다. fun 함수 범위에서만 v를 참조할 수 있습니다. 이는 여전히 변수 범위의 문제입니다. 이에 대해 많은 분들이 사용시 고민을 하십니다. extern 문은 파일 범위에서만 사용할 수 있는 것 같습니다.
2. extern 수정된 함수 선언. 본질적으로 변수와 함수 사이에는 차이가 없습니다. 함수 이름은 함수의 이진 블록 시작 부분을 가리키는 포인터입니다. 예를 들어 파일 a.c가 b.c의 함수를 참조해야 하는 경우 bc의 프로토타입은 int fun(int mu)이면 a.c에서 extern int fun(int mu)을 선언할 수 있으며 fun을 사용하여 무엇이든 할 수 있습니다. 변수 선언과 마찬가지로 extern int fun(int mu)은 a.c의 어느 위치에나 배치할 수 있으며 반드시 a.c의 파일 범위에 배치할 필요는 없습니다. 다른 모듈의 함수를 참조하는 가장 일반적인 방법은 해당 함수의 선언이 포함된 헤더 파일을 이용하는 것입니다. 함수를 참조하기 위해 extern을 사용하는 것과 헤더 파일을 포함하는 것의 차이점은 무엇입니까? 외부 참조 방법은 헤더 파일을 포함하는 것보다 훨씬 간단합니다! extern을 사용하는 방법은 간단합니다. 참조할 함수를 선언하려면 extern을 사용하세요. 이것은 아마도 KISS 원칙의 표현일 것입니다! 이렇게 하면 분명한 이점은 프로그램 컴파일 프로세스(정확히 말하면 전처리) 속도가 빨라지고 시간이 절약된다는 것입니다. 이 차이는 대규모 C 프로그램을 컴파일하는 동안 매우 분명해집니다.
3. 또한 extern 수정자를 사용하여 C 또는 C++ 함수의 호출 사양을 나타낼 수 있습니다. 예를 들어 C++에서 C 라이브러리 함수를 호출하려면 extern "C"를 사용하여 C++ 프로그램에서 참조할 함수를 선언해야 합니다. 이는 링커가 링크할 때 C 함수 사양을 사용하도록 링커에 지시하는 데 사용됩니다. 주된 이유는 C++와 C 프로그램이 컴파일된 후 대상 코드의 명명 규칙이 다르기 때문입니다.
C 언어에서 extern 사용법과 관련된 더 많은 글은 PHP 중국어 홈페이지를 주목해주세요!