전처리기 지시문

#define , #error, #if / #elif / #else 및 #endif / #ifdef와 #ifndef

 

 

 

전처리기 지시문은 일반적으로 소스 프로그램을 쉽게 변경하고 여러 실행 환경에서 쉽게 컴파일할 수 있도록 하기 위해 사용된다.

전처리기(=선행처리)란 컴파일 이전의 처리를 의미하고 소스파일은 컴파일러에 의해 컴파일 되기 이전에 이 전처리기 단계를 거친다.

 

 

 

◎ #define 지시문

이 #define 지시문은 세 부분으로 나뉜다.

#define PI 3.1415
지시자 매크로 매크로 몸체

많이 쓰이는 PI로 예시를 들어보면 코드에서 PI라는 이름(매크로)이 나오면 3.1415(매크로 몸체)로 바꾸라는 명령과 같다.

 

#define PI 3.1415

int function_before()
{
	int angle;
	angle = 180 * PI;
}

int funcint_after()
{
	int angle;
	angle = 180 * 3.1415;
}

 

전처리기의 단계를 거치면 코드 상에서 function_before의 내용을 function_after로 바꾼다.

이렇게 상수를 매크로로 정의한 것을 매크로 상수라고 부르고

상수가 아닌 함수로 정의해 놓은 것을 매크로 함수라고 부른다. 

 

 

 

 

◎ #if, #elif, #else 및 #endif 지시문 

#if... #endif는 조건부 코드 삽입을 위한 지시문이다. 

소스파일의 각 #if 지시문은 #endif 지시문과 일치해야 하며 #if와 #endif 사이에는 여러개의 #elif가 나올 수 있지만 #else는 하나만 사용할 수 있다.

 

#define ENABLE 1
#define IMPOSSIBLE 0


int main()
{
#if ENABLE
	cout << "ENABLE" << "\n";
#endif IMPOSSIBLE
	cout << "IMPOSSIBLE" << "\n";
}

 사용법은 이처럼 if문이 나오면 반드시 endif가 나와야 하며 ENABLE이 참(=1)이라면 cout << "ENABLE" << "\n"; 의 코드를 삽입하고 IMPOSSIBLE이 참이라면 cout << "IMPOSSIBLE" << "\n";의 코드를 삽입하라는 뜻이다. 

 

 

 

 

 

 

◎ #ifdef 및 #ifndef 지시문

정의 된 연산자와 함께 사용될 때 #if 지시어와 동일한 효과를 가진다.

 

#ifndef 식별자
#ifndef 식별자

이 지시문은 아래의 지시문과 같은 내용이다.

#if 정의된 식별자
#if! 정의된 식별자

 

#if는 매크로가 참인지 거짓인지에 따라서 동작한다면 #ifdef는 매크로가 '정의되어 있는지 아닌지'를 기준으로 동작한다. 

#ifdef는 매크로가 정의되어 있다면이고

#ifndef는 매크로가 정의되어 있지 않다면이라는 의미이다. 

 

 

 

 

◎ #error 지시문

전처리기가 해당 지시문을 발견하면 컴파일이 중지되고 여기에 포함된 오류 메시지가 전달된다. 

#define _EXIT

#ifdef _EXIT
#error "Error exists."
#endif

 

전처리기가 해당 코드를 만나게 되면 error.c : error: #error "Error exists." 이렇게 출력되며 종료된다. 

 

 

 

 

 

이 외에도 #import, #include, #line, #undef, #using 등이 전처리기 지시문에 포함된다. 

 

 

 

 

 

참고 자료;

 

https://docs.microsoft.com/ko-kr/cpp/preprocessor/preprocessor-directives?view=vs-2019

 

전처리기 지시문

전처리기 지시문Preprocessor directives 이 문서의 내용 --> #define, #ifdef과 같은 전처리기 지시문은 일반적으로 소스 프로그램을 쉽게 변경하고 여러 실행 환경에서 쉽게 컴파일할 수 있도록 하는데 사용됩니다.Preprocessor directives, such as #define and #ifdef, are typically used to make source programs easy to change and easy to

docs.microsoft.com

 

+ Recent posts