Można to zrobić w drugą stronę, ponieważ GCC obsługuje pragmy związane z pakietami VC++. Aby uzyskać więcej informacji, patrz here.
Extract ...
Dla kompatybilności z Microsoft Windows kompilatorów GCC obsługuje zestaw z #pragma
dyrektywach zmienić maksymalną wyrównanie członków struktur (inną niż zero szerokości bitfields), związki, i następnie zdefiniowane klasy . Wymagana wartość n zawsze musi być niewielka, o mocy dwóch i określa nowe wyrównanie w bajtach.
#pragma pack(n)
po prostu ustawia nowe wyrównanie.
#pragma pack()
ustawia wyrównanie do tego, który był w rzeczywistości, kiedy kompilacja zaczęło (zobacz też opcja wiersza polecenia -fpack-struct[=<n>]
patrz Opcje Kod gen).
#pragma pack(push[,n])
przesuwa bieżące ustawienie wyrównania na wewnętrznym stosie , a następnie opcjonalnie ustawia nowe wyrównanie.
#pragma pack(pop)
przywraca ustawienie wyrównania do ustawienia zapisanego na u góry stosu wewnętrznego (i usuwa ten wpis stosu).
Pamiętaj, że #pragma pack([n])
nie ma wpływu na ten wewnętrzny stos; w ten sposób możliwe jest posiadanie #pragma pack(push)
, po którym następuje wiele instancji #pragma pack(n)
i sfinalizowanych przez pojedyncze #pragma pack(pop)
.
Niektóre cele, np.i386 i powerpc, obsługują architekturę, która określa strukturę jako udokumentowaną __attribute__((ms_struct))
.
#pragma ms_struct on
włącza układ deklarowanych struktur.
wyłącza układ zadeklarowanych struktur.
#pragma ms_struct reset
powraca do domyślnego układu.
@Caspin: Chcę spakować całą strukturę. @Inne: chcę mieć #define (w rzeczywistości 2), aby to osiągnąć dla kompilatorów, których użyję. Na niektórych z nich sztuczka #pragma nie działa. – Malkocoglu
Należy pamiętać, że gcc obsługuje '#pragma pack' od co najmniej wersji 4.0; nie wiesz o RealView ARM. – Tom