전처리기 : 프로그램이 컴파일 되기 전 그 프로그램을 처리한다. 전처리기는, 프로그램에 들어 있는 기초 약어들을 전처리기 지시자 뒤에 지시한 것으로 대체한다. 전처리기는 요청하는 다른 파일들을 프로그램에 포함시킬 수 있다. 또한 컴파일러에게 선택적으로 코드를 보여줄 수 있다.
컴파일러의 프로그램 번역 단계
1. 소스코드에 나타나는 문자들을 소스 문자 집합으로 매핑한다.
2. 뒤에 개행 문자가 있는 백슬래쉬를 모두 찾아서 없앤다.
ex) printf("That's wond\
erful!\n"); -> printf("That's wonderful!\n");
3. 텍스트를 전처리 토큰들의 시퀀스와 화이트 스페이스와 주석의 시퀀스로 분리한다.(토큰은 스페이스에 의해 서로 분리된 텍스트 그룹이다.) 이때 주석은 하나의 스페이스 문자로 대체된다.
ex) int/* 스페이스 문자 하나 */ fox;
-> int fox;
4. 컴파일러에 따라 화이트 스페이스 문자들의 각 시퀀스를 하나로 대체한다.
위 과정들 이후 전처리 단계에 들어간다.
#define 전처리기 지시자와 다른 전전처리기 지시자들은 라인의 시작 위치에서 #기호로 시작한다. 지시자는 소스파일 어디에나 둘 수 있으며 지시자가 나타난 곳에서부터 파일의 끝까지 효력을 미친다.
전처리기 지시자는 #에서 부터 처음 만나는 개행 문자 까지이다. 즉 한 라인으로 한정된다. 백슬래쉬-개행 문자 조합은 전처리가 시작되기 전에 제거된다. 그러므로 하나의 지시자를 몇개의 물리적인 라인에 걸쳐 놓을 수 있다.
#define 라인은 세부분으로 이루어진다.
#define TWO 2
에서 첫번째 부분인 #define 은 지시자 자체이다.
두번째 부분은 매크로라고 부르는 사용자가 선택한 약어이다. 위에서는 TWO
위 예제와 같이 값을 나타내는 매크로는 객체 같은 매크로(object-like macro)라고 부른다.
매크로 이름은 글자, 숫자, 밑줄 만 사용할 수 있고 숫자를 첫 문자로 사용할 수 없다. 세번째 부분이 대체리스트(replacement list) 또는 몸체(body)이다.
전처리기는, 프로그램에서 매크로를 만나면 그것을 몸체로 대체한다.
어떠한 문자열이라도 심지어 C의 표현식 ( ex) printf(~)) 까지도 매크로로 표현할 수 있다.
토큰
매크로의 몸체는 토큰으로 구성된 문자열로 간주된다.
C 전처리기의 토큰은 매크로 정의의 몸체에 있는 문리된 단어들이다.
'Programming > C' 카테고리의 다른 글
파일 포함 시키기 : #include (0) | 2019.07.17 |
---|---|
C #define에 전달인자 사용하기 (0) | 2019.07.10 |
C 비트 연산 - 정리 (0) | 2019.07.10 |
C 비트 필드 (0) | 2019.07.10 |
C 비트 연산 (0) | 2019.07.10 |