본문 바로가기

Programming/C

전처리기, 전처리 지시자

전처리기(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