옛날에 사놓고 한번도 안 본 책 버리기 전에, 아리까리한게 뭔지 보니깐...
전처리기 챕터가 있었다. 그걸 정리하는 글
(근데 msdn 보니까 이것 말고 뭐가 엄청 많다?)
1. 전처리기 지시문
#include : 헤더 인클루드
#define : 매크로 정의
#undef : 정의 된 매크로 해제
#if, #elif, #else, #endif : 조건에 따라 블럭(?)을 활성화해서 컴파일 할지 결정
#ifdef : 매크로 조건 만족이면 블럭(?)을 활성화해서 컴파일
#ifndef : 매크로 조건 불만족 블럭(?)을 활성화해서 컴파일
2. #define 작동 원리
전처리기라는 이름처럼 컴파일 전에 PI라고 적힌 단어들을,
전처리기 과정에서 3.14로 바꿔(치환)주는 것이다..... 아마도?
> #define PI 3.14
3. 매크로 인자 설정으로 함수만들기
머... 이렇게 할 수 있다는 것이다.
> #define MUL(a, b) a*b
4. # (문자열 연산자)
> #define STR(a) #a
이렇게 하면,
> STR(abcd) 가
> "abcd"로 전처리 되는 것
5. ## (토큰 결합 연산자)
> #define TOKEN(a) tokenOf##a
이렇게 하면?
> TOKEN(9) 가
> tokenOf9 으로 전처리 되는것이다.
실수 정의라던가... 함수에서 끝나는 것이 아니라
변수선언/대입 ... 조건문... 같은 것들도 만들 수 있는 느낌인 것이다.
> #define TOKENLOGIC(a, b, c) a##b##c


6. 미리 정의된 매크로
(C 에서 제공하는 친구들 만)
__FILE__ : 현재 소스 코드 파일 이름 (%s)
__LINE__ : 현재 소스 코드에서 행 번호 (%d)
__DATE__ : 컴파일 날짜 (%s)
__TIME__ : 컴파일 시간 (%s)
7. 조건부 컴파일
7_1. #if ~ #endif 사이에 있는 코드 들은
#if 에 붙어있는 조건식에 따라 컴파일 할지가 결정이 된다.
> #if 1 ~ #endif
면 컴파일이 되고,
> #if 0 ~ #endif
면 컴파일이 되지 않는다.
7_2. #if ~ #elif ~ #else ~ #endif 도 있다.
마찬가지로 #if, #elif에 조건문이 붙어있고,
작동은 if / else if / else 문과 똑같이 작동한다.



7_3. #ifdef ~ #endif / #ifndef ~ #endif
얘는 조건식 대신 매크로 이름을 받고, 매크로 이름이 #define이 되어 있다면, 혹은 되어있지 않다면
사이에 있는 코드를 컴파일 할지 결정하는 것이다.

(API 가져다 쓰면, 무조건 보이는 전처리기...)
(IDE 수준에서도 이것저것 관련기능을 많이 만들어준 전처리기...)
(플랫폼 수준에서도 자기내들 꺼 따로 많이 추가한 전처리기...)
나는 아직 만드는 기능이 허접해 쓸일이 많이 없지만... 언젠가는!?
'Programming > C++' 카테고리의 다른 글
[일기장] 2X2, 3X3, 4X4 행렬식(determinant), 역행렬 (Inverse Mat) (0) | 2023.11.08 |
---|---|
[메모용] _mm_shuffle_ps example (0) | 2023.10.28 |
[std::map] comparer 잘 못쓰면 삽입이 안된다... (0) | 2022.09.15 |