C/C++ 프리프로세서 지시어: #error, #line, #pragma, #warning 활용법

C/C++ 프리프로세서 지시어 활용법

#error 지시어

#error는 컴파일러에게 컴파일 오류를 발생시키도록 지시하는 전처리기 명령어입니다. 이는 특정 조건이 충족되지 않았을 때 컴파일 과정을 중단시키는 데 사용됩니다.

사용법: #error 오류 메시지

다음은 #error를 사용한 예제 코드입니다:

#include 

int main() {
    // 조건이 충족되지 않으면 컴파일 중단
    #if !defined(VERSION_SUPPORTED)
        #error "지원되지 않는 버전입니다. 컴파일을 중단합니다."
    #endif
    
    printf("프로그램이 성공적으로 컴파일되었습니다.\n");
    return 0;
}

위 코드에서 VERSION_SUPPORTED 매크로가 정의되지 않은 경우, 컴파일러는 지정된 오류 메시지와 함께 컴파일을 중단합니다.

#line 지시어

#line 지시어는 소스 코드의 라인 번호와 파일 이름을 강제로 변경하는 데 사용됩니다. 이는 디버깅 시 오류 메시지에서 참조되는 라인 번호와 파일 이름을 조정하는 데 유용합니다.

사용법: #line 새_라인번호 ["새_파일이름"]

다음은 #line을 사용한 예제 코드입니다:

#include 

// 라이브러리 코드 시작
#line 1 "math_library.h"
int add(int a, int b) {
    return a + b;
}
// 라이브러리 코드 끝

// 메인 코드 시작
#line 1 "main_program.c"
int main() {
    printf("현재 파일: %s, 라인 번호: %d\n", __FILE__, __LINE__);
    
    // 라인 번호와 파일 이름 변경
    #line 100 "debug_info.c"
    printf("변경된 파일: %s, 변경된 라인: %d\n", __FILE__, __LINE__);
    
    return 0;
}

위 코드에서 __FILE__과 __LINE__ 매크로는 현재 처리 중인 파일의 이름과 라인 번호를 나타냅니다. #line 지시어를 사용하여 이 값을 임의로 변경할 수 있습니다.

#pragma message 지시어

#pragma message는 컴파일 시 컴파일러 출력 창에 사용자 정의 메시지를 표시하는 데 사용됩니다. 이는 #error나 #warning과 달리 컴파일 중단이나 경고를 발생시키지 않습니다.

사용법: #pragma message("컴파일 메시지")

다음은 #pragma message를 사용한 예제 코드입니다:

#include 

int main() {
    // 컴파일 시 메시지 출력
    #pragma message("이 프로그램은 최신 버전의 C 표준을 사용합니다.")
    
    // 파일 정보와 함께 메시지 출력
    #pragma message("컴파일 중인 파일: " __FILE__)
    #pragma message("마지막 수정 시간: " __TIMESTAMP__)
    
    printf("프로그램 실행\n");
    return 0;
}

위 코드는 컴파일 시 사용자 정의 메시지를 출력하며, 프로그램 실행에는 영향을 주지 않습니다.

#warning 지시어

#warning 지시어는 컴파일러에게 경고 메시지를 출력하도록 지시하지만, 컴파일 과정은 계속 진행됩니다. 이는 잠재적인 문제에 대한 알림을 제공하면서도 코드를 계속 사용할 수 있게 할 때 유용합니다.

사용법: #warning 경고 메시지

다음은 #warning을 사용한 예제 코드입니다:

#include 

int main() {
    // 사용되지 않는 변수에 대한 경고
    int unusedVar = 10;
    #warning 사용되지 않는 변수가 있습니다.
    
    printf("프로그램 실행\n");
    return 0;
}

위 코드는 컴파일 시 경고 메시지를 출력하지만, 프로그램은 정상적으로 컴파일 및 실행됩니다.

태그: 프리프로세서 전처리기 #error #line #pragma

6월 23일 03:26에 게시됨