pack

구조체, 공용 구조체 및 클래스 멤버에 대 한 압축 맞춤을 지정합니다.

#pragma pack( [ show ] | [ push | pop ] [, identifier ] , n  )

설명

pack데이터 선언 수준에서 제어를 제공 합니다.이 컴파일러 옵션과 다릅니다 /Zp, 컨트롤 모듈 수준 에서만 제공 됩니다.pack처음에는 효과가 struct, union, 또는 class pragma를 본 후 선언 합니다.pack정의에서 효과가 없습니다.호출 pack 없음 인수 집합을 가진 n 컴파일러 옵션을 설정 하는 값을 /Zp.컴파일러 옵션을 설정 하지 않으면 기본값은 8입니다.

구조체 맞춤을 변경 하는 경우 없지만 메모리 공간 수 있습니다 또는 성능이 떨어질 경우에 정렬 되지 않은 액세스에 대해서는 하드웨어에서 생성 된 예외를 가져옵니다 사용할 수 없습니다.예외를 사용 하 여 수정할 수 있습니다 SetErrorMode.

  • show(선택 사항)
    현재 맞춤 포장에 대 한 바이트 값을 표시 합니다.값으로 경고 메시지가 표시 됩니다.

  • push(선택 사항)
    푸시 현재 압축 맞춤이 값 내부 컴파일러 스택 및 현재 포장 맞춤 값을 집합에 n.경우 n 지정 되지 않은 경우 현재 포장 맞춤 값을 밀어 넣습니다.

  • pop(선택 사항)
    내부 컴파일러 스택 위쪽에서 레코드를 제거합니다.경우 n 에 지정 된 pop, 포장 값 결과 레코드는 스택의 맨 위에 연관 된 새로운 다음 맞춤 값을 압축 합니다.경우 n 를 지정 됩니다 예를 들어, #pragma pack(pop, 16), n 되는 새로운 포장 맞춤 값입니다.함께 팝업 경우 identifier, 예를 들어, #pragma pack(pop, r1), 스택의 모든 레코드가 있는 레코드까지 팝 한 다음 identifier 를 찾을 수 있습니다.레코드는 팝 되 고 새 압축 스택 위쪽의 결과 레코드와 관련 된 포장 값입니다 맞춤 값입니다.함께 팝업 경우는 identifier 없습니다 스택의 모든 레코드를 찾을 수 다음을 pop 는 무시 됩니다.

  • identifier(선택 사항)
    사용 하는 경우 push, 내부 컴파일러 스택 레코드에 이름을 할당 합니다.사용 하는 경우 pop, 레코드까지 내부 스택에서 팝 identifier 제거 됩니다. 경우 identifier 찾을 수 없는 내부 스택에 아무것도 팝입니다.

  • n(선택적 요소)
    포장에 사용 될 바이트 값을 지정 합니다.경우 컴파일러 옵션 /Zp 모듈에 대 한 기본값은 설정 되지 않은 n 8입니다.유효한 값은 1, 2, 4, 8 및 16입니다.멤버의 맞춤의 배수 하나 경계에 수 있습니다 n 또는 해당 멤버의 크기의 배수 중 가장 작은 것입니다.

#pragma pack(pop,identifier, n)정의 되지 않았습니다.

맞춤을 수정 하는 방법에 대 한 자세한 내용은 다음이 항목을 참조 하십시오.

예제

다음 샘플을 사용 하는 방법을 보여 줍니다 있는 pack pragma 구조체의 맞춤을 변경 합니다.

// pragma_directives_pack.cpp
#include <stddef.h>
#include <stdio.h>

struct S {
   int i;   // size 4
   short j;   // size 2
   double k;   // size 8
};

#pragma pack(2)
struct T {
   int i;
   short j;
   double k;
};

int main() {
   printf("%d ", offsetof(S, i));
   printf("%d ", offsetof(S, j));
   printf("%d\n", offsetof(S, k));

   printf("%d ", offsetof(T, i));
   printf("%d ", offsetof(T, j));
   printf("%d\n", offsetof(T, k));
}

0 4 8
0 4 6

다음 샘플을 사용 하는 방법을 보여 줍니다 있는 push, pop, 및 show 구문입니다.

// pragma_directives_pack_2.cpp
// compile with: /W1 /c
#pragma pack()   // n defaults to 8; equivalent to /Zp8
#pragma pack(show)   // C4810
#pragma pack(4)   // n = 4
#pragma pack(show)   // C4810
#pragma pack(push, r1, 16)   // n = 16, pushed to stack
#pragma pack(show)   // C4810
#pragma pack(pop, r1, 2)   // n = 2 , stack popped
#pragma pack(show)   // C4810

참고 항목

참조

Pragma 지시문과 __Pragma 키워드