Udostępnij za pośrednictwem


pakiet

Określa sposób wyrównania pakowania struktury, Unii i składowych klasy.

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

Uwagi

pack zapewnia kontrolę na poziomie deklaracji danych.To różni się od opcji kompilatora /Zp, który zapewnia tylko kontrolę poziomu w module.pack obowiązuje w pierwszym struct, union, lub class deklaracji po dyrektywę pragma jest widoczne.pack nie ma wpływu na definicje.Wywołanie elementu pack z ma zestawów argumentów n jest wartość określona w opcji kompilatora /Zp.Jeśli nie ustawiono opcję kompilatora, wartością domyślną jest 8.

Jeśli zmienisz Wyrównanie struktury, nie można używać jako ilości miejsca w pamięci, ale może zobaczyć spadek wydajności lub nawet pobrania wyjątków generowanych przez sprzętu odwołań do niewyrównanych dostępu.To zachowanie wyjątku można zmodyfikować za pomocą SetErrorMode.

  • show(opcjonalnie)
    Wyświetla bieżącą wartość bajtów do pakowania wyrównania.Wartość jest wyświetlana przez komunikat ostrzegawczy.

  • push(opcjonalnie)
    Umieszcza bieżący wyrównanie pakowania wartość dla wewnętrznego stosu kompilatora i ustawia wartość bieżącego wyrównanie pakowania do n.Jeśli n nie jest określony, bieżącego pakowania Wyrównanie wartości zostanie przypisany.

  • pop(opcjonalnie)
    Usuwa rekord od górnej krawędzi wewnętrznego stosu kompilatora.Jeśli n nie określono z pop, wartość pakowania powiązane z rekordem wynikowe górze stosu jest nowy, a następnie pakowania Wyrównanie wartości.Jeśli n jest określony, na przykład #pragma pack(pop, 16), n staje się nowy pakowania Wyrównanie wartości.Jeśli pop z identifier, na przykład #pragma pack(pop, r1), a następnie wszystkie rekordy na stosie są tam pojawi do rekordu, który ma identifier zostanie znaleziony.Czy rekord jest tam pojawi i pakowania wartość skojarzoną z wynikowego rekordu w nad jest stosu nowe pakowania Wyrównanie wartości.Jeśli pop z identifier nie znaleziono żadnych rekordów na stosie, a następnie pop jest ignorowana.

  • identifier(opcjonalnie)
    W przypadku użycia z push, przypisuje nazwę w rekordzie na stosie kompilatora wewnętrzny.W przypadku użycia z pop, POP rekordów wewnętrznego stosu dopóki identifier zostanie usunięty, jeśli identifier nie zostanie znaleziony w stosie wewnętrzny, nic nie jest tam pojawi.

  • n (opcjonalnie)
    Określa wartość, w bajtach, do użycia podczas pakowania.Jeśli opcja kompilatora /Zp nie jest ustawiony dla modułu, wartość domyślną dla n jest 8.Poprawne wartości to 1, 2, 4, 8 do 16.Wyrównanie elementu członkowskiego będzie w granicach, który może być wielokrotnością liczby n lub wielokrotnością rozmiaru elementu członkowskiego, który z nich jest mniejsza.

#pragma pack(pop,identifier, n) nie jest zdefiniowana.

Aby uzyskać więcej informacji na temat modyfikacji wyrównanie zobacz następujące tematy:

Przykład

Poniższy przykład przedstawia sposób użycia pack dyrektywę pragma, aby zmienić wyrównanie struktury.

// 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("%Iu ", offsetof(S, i));
   printf("%Iu ", offsetof(S, j));
   printf("%Iu\n", offsetof(S, k));

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

0 4 8
0 4 6

Poniższy przykład przedstawia sposób użycia push, pop, i show składni.

// 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

Zobacz też

Informacje

Dyrektywy pragma i słowo kluczowe __Pragma