#define (= 치환)
#define은 치환을 하는 기능을 함
- EXAMPLE을 42로 치환하는 예제
#define EXAMPLE 42
#if #else #endif (= 조건 컴파일)
컴파일시에 컴파일을 할지 안할지 선택 가능
- ifdef는 조건으로 하나의 정의된 형식만 사용 가능 (ifndef는 !ifdef와 같음)
#ifdef 조건
~
#else
~
#endif
#ifndef 조건
~
#else
~
#endif
- if는 조건으로 여러 정의 형식 사용 가능
#if(조건)
~
#else
~
#endif
- elif를 사용하여 조건을 추가하여 사용 가능
#if(조건)
~
#elif
~
#else
~
#endif
Header file 작성시 활용
- a.h
#ifndef _A_H_
#define _A_H_
~
#endif
- b.h
#ifndef _B_H_
#define _B_H_
~
#include "a.h"
~
#endif
- c.h
#include "a.h"
#include "b.h"
~
순서대로 a와 b 헤더파일을 불러오는데,
만약 ifndef 조건이 없다면 a.h를 불러오고 b.h에서 a.h를 한번 더 불러와서 중복 include로 인해 오류가 생김
위의 코드대로 작동한다면, a.h를 불러오고 그때 _A_H_가 define 되므로
b.h에서 다시 a.h를 불러 올때 ifndef로 인해 다시 include되지 않는다.
Macro (#define 활용)
- 간단한 연산을 미리 지정하여 활용 (예시)
#define BIT_CLEAR(data, bit) (data &= ~(0x1<<bit))
#define BIT_SET(data, bit) (data |= (0x1<<bit))
#define BIT_TOGGLE(data, bit) (data ^= (0x1<<bit))
#define BIT_CHECK(data, bit) (data & (0x1<<bit))
- Compiler에서 정의된 기본 macro: 실행시에 print를 하면 해당 내용을 출력
__LINE__ : line number
__FILE__ : file name
__DATE__ : date
__TIME__ : time
__func__ : function name
__cplusplus : when use C++, blocking name mangling
do ... while(0)
여러 line으로 define을 하게 되면 치환시에 오류가 생길 확률이 높아지므로,
do ... while(0)문으로 묶어서 한번만 실행하는 코드 블럭을 만들어서 활용
- do while문은 "do" 실행후에 "while"을 실행하는 코드인데, while에 0을 넣음으로서 후에 실행되는 내용을 없앰
#define PRINT(x) do { \
printf("======= \n"); \
printf("%s\n", x); \
printf("======= \n"); \
} while(0)
- 활용 예시
if(a) PRINT(x);
else ~~
#pragma (= 전처리기)
- Compile전에 처리되는 Compiler에게 무언가를 지시하는 내용