조건부 컴파일

Dohun Lee·2025년 7월 22일

C/C++

목록 보기
7/34
post-thumbnail

매크로를 활용한 조건부 컴파일

매크로는 함수, 상수 선언 이외에도 특정 조건에 따라서 컴파일 할 코드를 선택할때 사용할 수 있다.

#if .. #endif

#if .. #endif 명령문은 #if 가 참이라면 해당 범위의 코드가 삽입되고, 거짓이라면 해당 부분의 코드는 컴파일 시에 무시된다.

#define TRUE 1
#define FALSE 0

int main(){
#if TRUE // TRUE가 참이라면 해당 범위의 코드를 삽입
    std::cout << "True!" << std::endl;
#elif FALSE
    std::cout << "False!" << std::endl;
#endif
}

위와 같이 특정 조건이 참일때만 해당 코드를 삽입해야 할때 사용 할 수 있다. 또한 #endif 명령문을 통해 조건문을 종료해야 한다.

#ifdef .. #ifndef

  • #ifdef: 조건문의 매크로가 선언 되어있을때 해당 범위의 소스코드를 삽입한다.
  • #ifndef: 조건문의 매크로가 선언되어있지 않을때, 소스코드를 삽입한다.

조건부 컴파일의 사용 예시

조건부 컴파일의 대표적인 사용 예시는, 컴파일 환경에 따라 코드를 다르게 작성할때 사용할 수 있다. 윈도우 환경에선 특정 코드를 사용하고, 리눅스 환경에선 다른 코드를 사용할때 조건부 컴파일을 통하여 컴파일 되는 코드를 나눌 수있다.

int main() {
    // Windows 운영체제에서 컴파일될 때
#ifdef _WIN32
    std::cout << "This code is compiled for Windows.\n";
    // Windows 특정 API 함수 호출
    // MessageBoxA(NULL, "Hello Windows!", "Info", MB_OK);
#elif __linux__
    // Linux 운영체제에서 컴파일될 때
    std::cout << "This code is compiled for Linux.\n";
    // Linux 특정 시스템 호출
    // sleep(1);
#else
    // 다른 운영체제에서 컴파일될 때
    std::cout << "This code is compiled for an unknown OS.\n";
#endif

    return 0;
}

또 다른 사용 예시는 디버그 모드와 릴리즈 모드에서 삽입될 코드를 조건부 컴파일을 통해 나눌 수 있다.

#include <iostream>

// 보통 빌드 시스템(CMake, Makefile 등)에서 -DDEBUG_MODE 와 같이 정의함
// #define DEBUG_MODE // 직접 정의해도 됨

void perform_operation() {
    std::cout << "Performing core operation...\n";

    // DEBUG_MODE가 정의되어 있을 때만 이 코드가 컴파일됨
#ifdef DEBUG_MODE
    std::cout << "DEBUG: Checking intermediate values...\n";
    int temp_val = 10;
    std::cout << "DEBUG: temp_val = " << temp_val << "\n";
#endif

    std::cout << "Operation completed.\n";
}

int main() {
    perform_operation();
    return 0;
}
profile
미국 공대생

0개의 댓글