1. 전처리기(Preprocesser)
- 프로그램을 컴파일 할 때 컴파일 직전에 실행되는 별도의 프로그램.
- 전처리가 실행되면 각 코드에서 지시자(directives)를 찾는다.
- 지시자는 #으로 시작해서 줄 바꿈으로 끝나는 코드이다.
- 전처리기는 컴파일러가 실행되기 직전에 단순히 텍스트를 치환하는 역할을 하기도 하고,
디버깅에도 도움을 주며 헤더 파일의 중복 포함도 방지해주는 기능을 가진다.
1) Include
- #include 를 하면 전처리기는 포함된 파일된 내용을 지시자 위치에 복사한다.
- <>는 컴파일러와 함께 제공되는 헤더 파일을 include할 때 사용한다.
* 위 헤더 파일은 C++런타임 라이브러리의 헤더 파일로써 운영체제의 특별한 위치에 존재.
- "" 는 소스 파일이 있는 디렉토리에서 헤더파일을 include 하도록 전처리기에 지시한다.
* 일반적으로 이와 같은 방법으로 자신이 작성한 헤더 파일을 include 한다.
2) Macro
- #define 지시자를 사용해서 매크로를 만들 수 있다.
* 매크로는 입력을 출력으로 변환하는 방식을 정의하는 규칙이다.
- 매크로는 객체와 유사한 매크로(object-like macro)와 함수와 유사한 매크로(function-like macro)가 있다.
- 함수와 유사한 매크로는 함수처럼 작동한다.
- 객체와 유사한 매크로는 아래와 같이 두 가지 방법 중 하나로 정의한다.
- e.g)
#define identifier
#define identifier substitution_text
* 첫 번째 정의에서는 대체 텍스트가 없지만,
두 번째 정의에서는 대체 텍스트가 있다.
* 지시자는 명령어가 아니므로 둘 다 세미콜론(;)으로 끝나지 않는다.
- 대체 텍스트가 있는 객체와 유사한 매크로
- 전처리기가 이 지시자를 발견하면 identifier는 앞으로 'substitution_text'로 대체된다.
- 식별자는 일반적으로 공백을 나타내는 밑줄을 사용하며 대문자로 모두 입력한다.
- 대체 텍스트가 없는 객체와 유사한 매크로
- 일반적으로 이 전처리 지시자는 조건부 컴파일(conditional compilation)을 하기 위해 사용한다.
3) 조건부 컴파일
- 컴파일할 조건이나 컴파일하지 않을 조건을 지정할 수 있다.
- #ifdef 지시자를 사용하여 전처리기가 이전에 #이 정의되었는지 아닌지를 확인한다.
정의되었다면 #ifdef와 해당 #endif 사이의 코드가 컴파일 된다.
그렇지 않으면 코드가 무시된다.
'Language > C++' 카테고리의 다른 글
[C++] 컴파일 과정 (0) | 2020.12.15 |
---|---|
[C++] 컴파일 / 런타임 / 논리 오류 (0) | 2020.12.15 |
[C++] 입출력 속도 (0) | 2020.12.13 |
[C++] 얕은 복사와 깊은 복사 (0) | 2020.12.13 |
[C++] 스마트 포인터 (0) | 2020.12.13 |