전처리기(Preprocessor)
- 컴파일 전에 전처리 지시자로 먼저 정의 되어있는 것들을 프로세서에 등록하는 것.
전처리 지시자(Preprocessor Directives)란?
- #include와 같이 앞에 #이 붙는 명령어들을 말한다.
1. #include
-특정 소스위에 그 해당 코드를 붙여주는 역할을 한다.
#include <iostream> 옵션에 등록된 해더 파일을 먼저 찾아보고 등록
#include "userHeaderfile.h" 프로젝트 위치에 해더파일이 있는지 확인한 후 등록
2. #define, #undef
#define은 매크로 함수를 정의하거나 소스 코드 내에서 매크로 상수를 정의 하는데 사용된다.
#define add(a,b) (value1)+(value2)
int sum = add(1,2);
전처리기에 의해 아래와 같이 확장되어 sum에는 3이 대입된다.
int sum = 1 + 2;
다음으로 매크로 상수는 다음과 같은 형식으로 정의한다.
#define MAX 100
소스코드에서 if(i < MAX)라고 사용될 경우 전처리시에 MAX가 100으로 확장된다.
#undef는 #define로 정의된 매크로 상수/함수를 해제하는데 사용된다.
#undef add
#undef MAX
3. #if, #elif, #else, #endif
- if와 else if 등과 같은 역할.
- #if와 #endif는 반드시 짝을 이루어서 사용되어야 하고, #elif는 #if와 #endif사이에 원하는 횟수만큼 사용가능하며, #else를 사용할 경우에는 반드시 #endif 앞에서 한번만 사용 가능하다.
4. #ifdef, #ifndef
#if와 #elif가 불린 표현식을 평가하는데 비해 이 지시자는 매크로 상수의 정의여부를 평가한다.
#ifdef는 평가하고자 하는 매크로상수가 정의 되어 있을때 TRUE가 되고, #ifndef는 정의 되어 있지 않을때 TRUE가 된다.
#ifdef _DEBUG는 #if defined(_DEBUG)와 같은 의미이다.
5. #line
컴파일러가 내부적으로 유지하고 있는 라인번호와 파일이름을 변경한다.
test.h 파일 7번 라인에서
__FILE__와 __LINE__ 매크로를 사용해서 출력해보면 test.h, 7로 나오지만
같은 파일에서
#line 100 "change.h"와 같이 매크로를 실행하면 컴파일 내부적으로 유지되고 있던 라인번호와 파일이름이 100과 change.h로 변경된다.
6. #error
fatal error를 발생시키고 전처리과정을 중단한다.
#ifndef MAX
#error You must define MAX!!!
#endif
위와 같은 코드가 있고 MAX라는 매크로 상수가 정의 되어 있지 않은 경우에 컴파일을 실행해보면 #error 매크로에 의해 아래와 같은 오류가 발생하면서 컴파일이 중단된다.
오류 1 fatal error C1189: #error : You must define MAX!!!
d:\works\projects\appwizard\appwizardview.cpp 18
'Programming > C' 카테고리의 다른 글
#pragma pack (0) | 2012.09.21 |
---|---|
extern, 함수에서의 static (0) | 2012.09.21 |
#pragma once와 #ifndef 의 차이 (0) | 2012.09.11 |
C Study 04 - 함수 (0) | 2012.08.08 |
C Study 03 - 반복문과 조건문 (0) | 2012.07.25 |