강좌 & 팁
#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으로 변경한다.