#pragma 지시자는 플랫폼별로 고유한 기능에 대한 지시 사항을 컴파일러에게 전하는 방법이다.

 

# 문자로 시작하므로 전처리 명령처럼 보이지만 컴파일러 지시자 이다.

 

기본형식은 다음과 같다

 

#pragma 토큰 문자열

 

토크문자열은 여러가지가 있으며 여기서는 pack 지시자에 대하여 알아보겠다

pack 지시자는 이후 선언되는 구조체의 정렬 방식을 지정하는 지시자 이다. 같은 소스에 있는 두 구조체를 다른 방식으로 정렬 할 수 있다.

 

다음의 예제를 보자

 

#include<stdio.h>

#pragma
 pack(2)
struct st1 { short s; int i; };  // 2바이트 정렬
#pragma pack(push,4)             // 푸시하면서 4바이트 정렬로 바꿈
struct st2 { short s; int i; };  // 4바이트 정렬
#pragma pack(pop)                // 원래 정렬값 복원
struct st3 { short s; int i; };
#pragma pack()           //기본정렬값
struct Park {short sNum; int iNum;}; 

int main()
{
  
  
  struct st1 C;
  struct st2 D;
  struct st3 E;
  struct Park B;
  
  printf("C: %d\n",sizeof(C));
  printf("D: %d\n",sizeof(D));
  printf("E: %d\n",sizeof(E));
  printf("B: %d\n",sizeof(B));
  return 0;
}

 

 

 

 

pack(push,n) 명령은 현재의 정렬 상태를 스택에 저장하면서 정렬값을 n으로 변경한다.

pack(pop,n) 명령은 스택의 최상단에 있는 정렬값을 제거하고 새로운 정렬값을 n으로 변경한다.