Page 29 -
P. 29
다른 식별자(printf, size_t, EXIT_SUCCESS)에 대한 선언문은 코드에 나오지 않는다. 사실 이 식별
자들은 이미 선언된 상태인데, 예제 1-2를 컴파일할 때 본 것처럼 이 식별자에 대한 정보를 컴파
일러에게 명시적으로 알려 줘야 한다. 1줄과 2줄에 나온 문장이 바로 이런 정보를 전달하기 위해
적은 것이다. printf는 stdio.h에, size_t와 EXIT_SUCCESS는 stdlib.h에 선언되어 있다. 이런 식 2
별자를 실제로 선언하는 문장은 컴퓨터 어딘가에 저장된 .h 파일에 담겨 있다. 예를 들면 다음과
같다. 프로그램의 핵심 구조
int printf(char const format[static 1], ...);
typedef unsigned long size_t;
#define EXIT_SUCCESS 0
이렇게 미리 선언된 문장이 구체적으로 어떻게 작성됐는지는 그리 중요하지 않기 때문에 일반적
C
C
으로 인클루드 파일(include file) 또는 헤더 파일(header file) 에 숨겨 둔다. 이러한 식별자의 의미를
알기 위해 헤더 파일을 읽어보는 것은 좋은 방법이 아니다. 대부분 읽기 어렵게 적혀 있기 때문이
다. 그보다는 현재 플랫폼에서 제공하는 문서를 참조하는 것이 낫다. 번거로움을 감수할 수 있다
면 최신 C 표준 문서를 참조하는 것이 좋다. 가장 근본이 되는 문서다. 쉬운 방법을 원한다면 다음
과 같이 명령을 실행해 보자.
터미널
0 > apropos printf
1 > man printf
2 > man 3 printf
선언은 대상의 특징을 표현하기만 할 뿐, 실제로 생성하지 않는다. 따라서 같은 선언을 여러 번 적
으면 텍스트만 중복될 뿐 문제가 발생하지는 않는다.
TAKEAWAY 2.3 식별자의 선언문이 서로 일치한다면 여러 번 나와도 문제는 없다.
프로그램의 일정한 영역 안에서 어떤 식별자에 대해 서로 다른 선언문이 여러 개 나오면 (컴파일
러나 프로그래머 입장에서) 확실히 헷갈릴 것이다. 그래서 상충하는 선언문이 동시에 나올 수 없
다. C 표준에서는 ‘프로그램의 일정한 영역’의 의미를 구체적으로 정의한다. 이처럼 프로그램에서
C
C
식별자가 보이는(visible) 영역을 스코프(scope) 라고 부른다.
TAKEAWAY 2.4 식별자는 선언문이 속한 스코프에 바인딩(binding)된다.
식별자의 스코프는 문법에 의해 명확히 표현된다. 예제 1-1의 세 선언문에 대한 스코프는 다음과
같다.
33
모던c.indd 33 2021-12-29 오후 2:32:58