#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;
}
설명:
- #define DEBUG: DEBUG라는 매크로를 정의합니다.
- #ifdef DEBUG: DEBUG라는 매크로가 정의되어 있는지 확인합니다. 만약 정의되어 있다면 그 아래 코드를 컴파일합니다.
- 이 예시에서는 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 // 새로운 값으로 재정의
사용하는 이유
- 매크로 중복 방지: 매크로의 이름이 중복될 경우, 기존 정의를 제거하고 새로 정의할 수 있습니다.
- 특정 코드 영역에서만 매크로 사용: 한 번 정의한 매크로를 특정 코드 범위 내에서만 유효하도록 제한할 때 유용합니다.
- 라이브러리와의 충돌 방지: 동일한 이름의 매크로가 여러 라이브러리에서 정의되는 경우, 충돌을 피하기 위해 매크로를 해제할 수 있습니다.
728x90
'공부 > C++, C' 카테고리의 다른 글
메크로란? 정의하기, 해제하기 - #define, #undef (0) | 2024.10.21 |
---|---|
C++, C 공부 시작 (0) | 2024.10.21 |