Preprocessor
From cppreference.net
<
cpp
전처리기는 번역 단계 4 에서 컴파일 전에 실행됩니다. 전처리의 결과는 단일 파일이며, 이 파일은 실제 컴파일러로 전달됩니다.
목차 |
지시문
전처리 지시문은 전처리기의 동작을 제어합니다. 각 지시문은 한 줄을 차지하며 다음과 같은 형식을 가집니다:
- the # 문자.
- 다음의 시퀀스:
-
- 표준에서 정의된 지시문 이름(아래에 나열됨)과 해당 인수, 또는
- 하나 이상의 전처리 토큰 으로 시작하는 토큰이 표준에서 정의된 지시문 이름이 아닌 경우, 이 지시문은 구현에서 정의된 의미를 가진 조건부 지원 (예: 일반적인 비표준 확장은 컴파일 중 사용자 정의 메시지를 출력하는 지시문 #warning 임) (C++23까지) , 또는
- 아무것도 아닌 경우, 이 지시문은 아무 효과가 없음.
- 줄 바꿈.
|
모듈 및 import 지시문 또한 전처리 지시문입니다. |
(since C++20) |
전처리 지시문은 매크로 확장에서 비롯되어서는 안 됩니다.
#define EMPTY EMPTY # include <file.h> // 전처리 지시문이 아님
기능
전처리기는 다음과 같은 소스 파일 변환 기능을 갖습니다:
- 조건부로 소스 파일의 일부를 컴파일 (지시문 #if , #ifdef , #ifndef , #else , #elif , #elifdef , #elifndef (C++23부터) , 그리고 #endif 으로 제어됨).
- 텍스트 매크로를 대체 하면서 식별자를 연결하거나 인용 (지시문 #define 과 #undef , 그리고 연산자 # 와 ## 으로 제어됨).
- 다른 파일을 포함 (지시문 #include 와 __has_include 로 확인 (C++17부터) ).
- 오류 또는 경고 를 발생 (C++23부터) (지시문 #error 또는 #warning 으로 각각 제어됨 (C++23부터) ).
전처리기의 다음과 같은 측면들을 제어할 수 있습니다:
- implementation-defined 동작 (지시어 #pragma 및 연산자 _Pragma (C++11부터) 에 의해 제어됨). 또한 일부 컴파일러는 __pragma 연산자를 비표준 확장으로 (다양한 정도로) 지원합니다.
- 파일 이름과 줄 정보 가 전처리기에서 사용 가능함 (지시어 #line 에 의해 제어됨).
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| CWG 2001 | C++98 | 비표준 정의 지시문 사용의 동작이 명확하지 않았음 | 조건부 지원으로 변경됨 |
참고 항목
|
C++ documentation
에 대한
Predefined Macro Symbols
|
|
|
C++ documentation
에 대한
Macro Symbol Index
|
|
|
C documentation
에 대한
preprocessor
|