프로그래밍 언어/C & C++ 정리
Static 링크 :외부 링크와 내부 링크
뽀또치즈맛
2025. 4. 30. 09:27
static링크를 설명하기 전에 먼저
C++에서 링크를 처리하는 과정을 이해할 필요가 있다.
C++ 코드는 소스 파일 단위로 컴파일해서
생성된 객체 파일을 링크 단계에서 서로 연결한다.
함수나 글로벌(전역) 변수처럼
C++ 소스 파일마다,
정의된 이름은 외부 링크나 내부 링크를 통해 서로 연결된다.
외부 링크
외부 링크로 연결되면
다른 소스 파일에서 이름을 사용할 수 있다.
내부 링크(= 정적 링크)
내부 링크(=정적 링크)로 연결되면
같은 파일에서만 사용할 수 있다.
함수나 글로벌 변수는 기본적으로
외부 링크가 적용된다.
하지만 선언문 앞에 static키워드가 붙이면
내부 링크(=정적 링크)가 적용된다.
익명 네임스페이스를 이용하여 내부 링크 적용
앞서 말했듯이
내부 링크로 연결되면 같은 파일 내에서만 사용 가능하다고 했다.
이는 어떤 경로를 파고들고 까서 써야한다는 뜻이다.
이는 즉 네임스페이스의 사용법과 흡사하다.
anonymous namespace를 사용하여
내부 링크가 적용되게 할 수도 있다.
예를 들어 변수나 함수를 static으로 지정하지 말고
다음과 같이 이름 없는 네임스페이스로 묶어줘도 된다.
namespace
{
void f();
// 이하 구현 생략
}
익명 네임스페이스에 속한 항목은
이를 선언한 소스 파일 안에서는
어디서든 접근할 수 있다.
하지만 다른 소스 파일에서는 접근할 수 없다.
그러므로 static 키워드를 선언했을 때 효과와 같다.
Tip.
여기서 유의할 것은 당연하게도,
링크와 생명주기는 또 다른 얘기다.
또 다른 팁으로는,
내부 링크로 지정할 때는
static 키워드보다는
익명 네임스페이스를 사용하는 것이 바람직하다.