Programming/C++

[C][책정리] 전처리기 냅다 정리

Dorasima 2023. 12. 16. 13:11

옛날에 사놓고 한번도 안 본 책 버리기 전에, 아리까리한게 뭔지 보니깐...

전처리기 챕터가 있었다. 그걸 정리하는 글

(근데 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 수준에서도 이것저것 관련기능을 많이 만들어준 전처리기...)

(플랫폼 수준에서도 자기내들 꺼 따로 많이 추가한 전처리기...)

 

나는 아직 만드는 기능이 허접해 쓸일이 많이 없지만... 언젠가는!?