static 링크
외부 링크와 내부 링크
11장 - static 링크
1) static 링크
C++은 코드를 소스 파일 단위로 컴파일 해서 그 결과로 나온 오브젝트 파일들을 링크 단계에서 연결한다. 이 때 링크 방식에는 외부링크
와 내부링크(정적링크)
가 있다. 외부 링크로 연결되면 다른 소스파일에서 이름을 사용할 수 있고, 내부 링크로 연결되면 같은 파일에서만 사용 가능하다.
함수나 전역 변수는 기본적으로 외부 링크가 지원되지만, 선언문 앞에 static을 붙이면 내부 링크가 적용된다.
//file_1
using namespace std;
void f();
int main() {
f();
return 0;
}
//file_2
#include <iostream>
using namespace std;
void f();
void f() {
cout << "f\n";
}
위를 실행하면 f
가 출력된다. 자연스레 외부 링크가 연결 된 것이다. 여기서 file_2를 수정해보자. void f()
→ static void f()
확인할 수 없는 외부 참조라고 표시된다. static덕분에 내부 링크로 연결된 것이다.
같은 효과의 다른 방식으로는 익명 네임스페이스
가 있다. 반대로 외부링크로 처리하도록 하는 키워드가 있는데, 바로 extern
이다.
컴파일러는 extern을 선언으로 취급한다. extern int x
를 입력해도 메모리가 할당되지 않는 것이다. extern int x = 3
처럼 정의를 처리해야 한다.