Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C/C++ #pragma 지시문 완벽 정리 – 종류와 사용 예제

#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)))으로 대체해야 합니다.