Page 450 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 450
합(external linkage)이라 합니다. 이 그림에서는 초록색 박스 로 표시한 식별자가 이에 해당합니다. 외부
결합으로 주어진 식별자는 소스 파일 외부에 공개됩니다. 그림 11C-3의 소스 파일 B의 main 함수에
서 소스 파일 A의 함수 h를 호출할 수 있는 것은 함수 h가 외부 결합했기 때문입니다. 또 변수 a와 함수
f는 같은 이름의 식별자가 양쪽 소스 파일에 존재하므로 같은 식별자가 충돌하여 ‘중복 정의’ 오류가 발
생합니다. 이 오류가 발생하는 시점은 컴파일 단계가 아닌 링크 단계입니다.
내부 결합
키워드 static을 붙여 정의하는 함수와 파일 유효 범위를 갖는 변수에 주어지는 특징을 내부 결합
(internal linkage)이라 합니다. 아래 그림에서 검은색 박스 로 표시한 식별자가 이에 해당합니다. 내부 결
합으로 주어진 식별자는 소스 파일의 내부에서만 통용됩니다. 내부 결합을 갖는 식별자는 같은 이름의
식별자가 여러 소스 파일에 존재해도 ‘중복 정의’ 오류가 발생하지 않습니다.
파일 A 파일 B
int a; a 충돌 a int a;
int y; y extern int y;
static int s; s s static int s;
충돌
int f(int c) f f long f(double c)
{ {
/* … */ /* … */
} }
static void g(void) g g static void g(void)
{ {
/* … */ y = 5;
} }
double h(long m) h main int main(void)
{ {
s = 10; s = 7;
/* … */ /* … */
g(); h(100);
/* … */ g();
} }
[그림 11C-3] 소스 파일과 결합의 예
소스 파일 A의 변수 s와 함수 g, 소스 파일 B의 변수 s와 함수 g는 내부 결합이므로 다른 소스 파일에서
사용하거나 호출할 수 없습니다. 파일 A의 함수 h에서 10을 대입한 변수는 파일 A 안에 정의한 변수 s
입니다. 또한 파일 A의 함수 h에서 호출하는 함수 g는 파일 A 안에서 정의한 함수입니다. 마찬가지로
파일 B의 main 함수에서 7을 대입한 변수는 파일 B에서 정의한 변수 s입니다. 또한 파일 B에서 호출
하는 함수 g는 파일 B 안에서 정의한 함수 g입니다.
실습 11-4의 프로그램에서는 hash 함수와 SetNode 함수를 내부 결합하여 사용합니다. 따라서 이 두 함수는 외부에서
호출할 수 없습니다.
450 C 알고리즘