[C언어]전처리 및 비트필드
1. 전처리기
전처리기(preprocessor)는 본격적으로 컴파일하기에 앞서서 소스 파일을 처리하는 컴파일러의 한 부분이다. 전처리기는 보통 컴파일러에 포함되어 있고 자동으로 실행되며 컴파일러의 하나의 요소로 취급된다.
전처리기는 소스파일을 처리하여 수정된 소스 파일을 생산한다. 이 수정된 소스 파일은 다음 단계의 컴파일러 프로그램에 의하여 본격적으로 컴파일된다. 보통 이 수정된 소스 파일은 컴파일 과정이 끝난 다음에 삭제되기 때문에 사용자에게는 보이지 않는다.
전처리기는 몇 가지의 전처리기 지시자들을 처리한다. 이들 지시자들은 # 기호로 시작한다. # 기호는 문장의 첫번째 문자이어야 한다. 우리가 헤더 파일을 포함하기 위하여 사용하였던 #include가 바로 전처리기 지시어이다.
자세히 들어가기에 앞서서 전처리기에서 사용되는 지시자들을 표로 정리하였다.
지시어 |
의미 |
#define |
매크로 정의 |
#include |
파일 포함 |
#undef |
매크로 정의 해제 |
#if |
조건이 참일 경우 |
#else |
조건이 거짓일 경우 |
#endif |
조건 처리 문장 종료 |
#ifdef |
매크로가 정의되어 있는 경우 |
#ifndef |
매크로가 정의되어 있지 않은 경우 |
#line |
행번호 출력 |
#pragma |
시스템에 따라 의미가 다름 |
2. 단순매크로
#define 지시자를 이용하여 숫자 상수에 의미 있는 이름을 부여할 수 있다. #define 문을 이용하여 숫자 상수를 기호 상수로 만든 것을 단순 매크로(macro)라고 한다.
형식 |
#define 기호상수 텍스트 |
예 |
#define PI 3.141592 |
설명 |
기호상수를 찾아서 텍스트로 바꾼다. |
많이 사용되는 매크로의 예를 살펴보자.
#define |
PI |
3.141592 // 원주율 |
#define |
TWOPI |
(3.141592 * 2.0) // 원주율의 2배 |
#define |
MAX_INT |
2147483647 // 최대정수 |
#define |
EOF |
(-1) // 파일의 끝표시 |
#define |
MAX_STUDENTS |
2000 // 최대 학생수 |
#define |
EPS |
1.0e-9 // 실수의 계산 한계 |
#define |
DIGITS |
"0123456789" // 문자 상수 정의 |
#define |
BRACKET |
"(){}[]" // 문자 상수 정의 |
#define |
getchar() |
getc(stdin) // stdio.h에 정의 |
#define |
putchar() |
putc(stdout) // stdio.h에 정의 |
3. 함수매크로
4. #ifdef, #endif
5. #if, #else, #endif
6. 비트 필드 구조체