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()

Untitled

확인할 수 없는 외부 참조라고 표시된다. static덕분에 내부 링크로 연결된 것이다.

같은 효과의 다른 방식으로는 익명 네임스페이스가 있다. 반대로 외부링크로 처리하도록 하는 키워드가 있는데, 바로 extern이다.

컴파일러는 extern을 선언으로 취급한다. extern int x를 입력해도 메모리가 할당되지 않는 것이다. extern int x = 3처럼 정의를 처리해야 한다.