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;
}
위 코드는 컴파일 시 경고 메시지를 출력하지만, 프로그램은 정상적으로 컴파일 및 실행됩니다.