반응형
모든 글에 대한 내용은 아래 cppreference의 내용입니다.
cppreference.com
Null-terminated strings: byte − multibyte − wide
cppreference.com
perprocessor - 전처리기
전처리기는 컴파일러 전에 번역?(언어를 컴파일하기전? 번역?) 4단계에서 실행된다.
전처리의 결과는 단일 파일로 그때 실제 컴파일러에게 전달된다.
Directieves
전처리 지침은 전처리의 행동에 대해 제어한다.
각 지침은 한줄을 차지하고 다음 형식을 갖는다.
- the # character
- a sequence of:
- 표준 정의 지침 이름은 다음과 같다, 또는
- 시작된 토큰이 표준 정의 지침의 이름이 아닌 하나 이상의 전처리 토큰, 인 경우 지침은 실행 정의 의미론을 가지고(with) 조건부로 지원한다.
- 아무것도, 이 경우에는 아무 효과가 없다.
- a line break. 줄..멈춤?
전처리 지침은 매크로 확장에서 온것이 아니다.
#define EMPTY
EMPTY # include <file.h> // not a preprocessing directive
cpp 레퍼런스에 이렇게 되어 있는데, 전처리 지침에는 #문자가 와야함. 근데 EMPTY는 없기 때문에 전처리 지침이 아니다~ 이 뜻이다.
그래서 컴파일러가 전처리를 처음에 판단할 때, #이 없기 때문에 EMPTY를 매크로 확장해서 지워 버린다.
Capabilities
전처리는 소스 파일의 번역? 성능을 가지고 있다.
- 조건 컴파일 소스파일 부분
- 연결 가능성 또는 식별자를 인용한면서 텍스트를 교체한다. (concatenating = 결합 , quoting = 변환)
- 다른 파일을 포함하다.
- 오류 또는 경고 원인 (발생인듯?)
#define CONCAT(a, b) a##b // Concatenating (이어붙이기)
#define QUOTE(a) #a // Quoting (문자열 만들기)
int myVar = 10;
// 1. Concatenating 사용
int CONCAT(my, Var) = 20;
// -> int myVar = 20; 으로 변환됨 (변수 이름을 만듦)
// 2. Quoting 사용
const char* str = QUOTE(myVar);
// -> const char* str = "myVar"; 로 변환됨 (문자열을 만듦)
CONCAT 매크로는 a,b를 넣으면 a와 b를 변수 이름으로 이어 붙인다. (결과를 붙이는게 아님) 이게 위에서 말한 연결가능성임.
QUOTE 매크로는 들어온 값 a를 문자열로 만들어줌 이게 변수처럼 ""이런게 안붙고 들어오는데 문자열로 변환이 가능함.
전처리기는 다음 측면을 제어할 수 있다.
- 구현 정의 행동. 추가적으로, 일부 컴파일러는 연산자 _paragma를 비표전 확장자로서 (as a) 지원한다.
- 전처리기에서 이용할 수 있는 파일 이름 그리고 줄 정보
반응형
'C++' 카테고리의 다른 글
| 2. Conditional inclusion #if #ifdef... (C++) (0) | 2025.11.22 |
|---|