#pragma 지시문이란?
#pragma는 C/C++ 언어에서 전처리기(preprocessor) 지시문의 하나로, 컴파일러에게 추가적인 정보를 전달하는 데 사용됩니다. 표준화되지 않은 컴파일러 고유의 기능을 활성화하거나 특수한 동작을 지정할 때 유용하게 쓰입니다.
컴파일러마다 지원하는 #pragma 종류가 다를 수 있으므로, 사용 중인 컴파일러의 문서를 참고하는 것이 좋습니다.
#pragma 지시문 문법
#pragma token_name
#pragma 뒤에 원하는 토큰(지시어 이름)을 붙여 사용하며, 각 토큰에 따라 컴파일러가 수행하는 동작이 달라집니다.
C/C++의 주요 #pragma 지시문
| 번호 | #pragma 지시문 및 설명 |
|---|---|
| 1 | #pragma startup main() 함수가 실행되기 전에, 지정된 함수가 먼저 호출됩니다. |
| 2 | #pragma exit 프로그램이 종료되기 직전에, 지정된 함수가 마지막으로 호출됩니다. |
| 3 | #pragma warn 컴파일 과정에서 발생하는 경고(warning) 메시지를 숨기거나 제어할 때 사용합니다. |
| 4 | #pragma GCC dependency 현재 파일과 다른 파일의 수정 날짜를 비교합니다. 다른 파일이 더 최신이라면 경고 메시지를 출력합니다. |
| 5 | #pragma GCC system_header 현재 파일의 코드를 시스템 헤더(system header)에서 온 것처럼 취급하여, 컴파일러가 해당 코드에 대해 경고를 발생시키지 않도록 합니다. |
| 6 | #pragma GCC poison 프로그램 내에서 특정 식별자(identifier)의 사용을 차단합니다. 해당 식별자가 사용되면 컴파일 오류가 발생합니다. |
#pragma 지시문 사용 예제
다음은 C 언어에서 #pragma startup과 #pragma exit을 사용한 예제입니다.
예제 코드
#include<stdio.h>
int display();
#pragma startup display
#pragma exit display
int main() {
printf("\nI am in main function");
return 0;
}
int display() {
printf("\nI am in display function");
return 0;
}실행 결과
I am in display function I am in main function I am in display function
위 예제에서 #pragma startup display에 의해 main() 함수보다 display() 함수가 먼저 실행되고, #pragma exit display에 의해 프로그램 종료 직전에 다시 한번 display() 함수가 호출되는 것을 확인할 수 있습니다.
참고: #pragma startup과 #pragma exit은 주로 구형 Borland(Turbo C) 계열 컴파일러에서 지원되며, GCC 등 최신 컴파일러에서는 동작하지 않거나 다른 방식(
__attribute__((constructor)),__attribute__((destructor)))으로 대체해야 합니다.