본문 바로가기
공부/C++, C

메크로 있는지 확인 하기, 선언하기, 해제하기 - #ifdef, #define, #undef

by 아찌방 2024. 10. 21.

 

 

#ifdef란?

 C++에서 전처리기(Preprocessor) 지시문 중 하나로, 조건부 컴파일(Conditional Compilation)을 가능하게 해줍니다.

"만약 정의되어 있다면"이라는 의미로, 특정 매크로가 정의되어 있을 때만 코드의 일부를 컴파일할 수 있도록 합니다. 이를 통해 코드의 특정 부분을 선택적으로 포함하거나 제외할 수 있습니다.

 

 

기본 형식:

#ifdef MACRO_NAME // 이 코드는 MACRO_NAME이 정의되어 있을 때만 컴파일됩니다. #endif
 

예시:

#include <iostream> // DEBUG라는 매크로를 정의 
#define DEBUG 
int main() { 
	int x = 10; 
    #ifdef DEBUG std::cout << "Debugging mode is on. Value of x: " << x << std::endl;
    #endif std::cout << "Program running..." << std::endl; 
	return 0; 
}
 

설명:

  1. #define DEBUG: DEBUG라는 매크로를 정의합니다.
  2. #ifdef DEBUG: DEBUG라는 매크로가 정의되어 있는지 확인합니다. 만약 정의되어 있다면 그 아래 코드를 컴파일합니다.
  3. 이 예시에서는 DEBUG가 정의되어 있기 때문에, "Debugging mode is on..."라는 메시지가 출력됩니다.

매크로가 정의되어 있지 않다면 #ifdef 블록 안의 코드는 컴파일되지 않으므로, 특정 상황에서만 코드를 실행하거나, 디버깅할 때만 출력 메시지를 보여주고 싶을 때 유용합니다.

 

 

반대 지시문: ifndef

  • #ifndef: 매크로가 정의되어 있지 않을 때 실행되는 조건부 컴파일을 지원합니다.
     
#ifndef MACRO_NAME 
	// 이 코드는 MACRO_NAME이 정의되어 있지 않을 때만 컴파일됩니다. 
#endif

 

메크로 제거: undef

  • #undef : 이전에 정의한 매크로를 제거(정의 취소)하는 역할을 합니다. #define으로 선언한 매크로를 더 이상 사용하지 않도록 할 때 사용됩니다.
#define MAX_SIZE 100

// ... 다른 코드

#undef MAX_SIZE  // 기존 MAX_SIZE 정의 해제

#define MAX_SIZE 200  // 새로운 값으로 재정의

 

사용하는 이유

  1. 매크로 중복 방지: 매크로의 이름이 중복될 경우, 기존 정의를 제거하고 새로 정의할 수 있습니다.
  2. 특정 코드 영역에서만 매크로 사용: 한 번 정의한 매크로를 특정 코드 범위 내에서만 유효하도록 제한할 때 유용합니다.
  3. 라이브러리와의 충돌 방지: 동일한 이름의 매크로가 여러 라이브러리에서 정의되는 경우, 충돌을 피하기 위해 매크로를 해제할 수 있습니다.

 

 

 

 

 

 

728x90

'공부 > C++, C' 카테고리의 다른 글

메크로란? 정의하기, 해제하기 - #define, #undef  (0) 2024.10.21
C++, C 공부 시작  (0) 2024.10.21