1 | |
2 | |
3 | // =============================================================================== |
4 | // May be included multiple times - sets structure packing to 1 |
5 | // for all supported compilers. #include <poppack1.h> reverts the changes. |
6 | // |
7 | // Currently this works on the following compilers: |
8 | // MSVC 7,8,9 |
9 | // GCC |
10 | // BORLAND (complains about 'pack state changed but not reverted', but works) |
11 | // Clang |
12 | // |
13 | // |
14 | // USAGE: |
15 | // |
16 | // struct StructToBePacked { |
17 | // } PACK_STRUCT; |
18 | // |
19 | // =============================================================================== |
20 | |
21 | #ifdef AI_PUSHPACK_IS_DEFINED |
22 | # error poppack1.h must be included after pushpack1.h |
23 | #endif |
24 | |
25 | #if defined(_MSC_VER) || defined(__BORLANDC__) || defined (__BCPLUSPLUS__) |
26 | # pragma pack(push,1) |
27 | # define PACK_STRUCT |
28 | #elif defined( __GNUC__ ) |
29 | # if !defined(HOST_MINGW) |
30 | # define PACK_STRUCT __attribute__((__packed__)) |
31 | # else |
32 | # define PACK_STRUCT __attribute__((gcc_struct, __packed__)) |
33 | # endif |
34 | #else |
35 | # error Compiler not supported |
36 | #endif |
37 | |
38 | #if defined(_MSC_VER) |
39 | // C4103: Packing was changed after the inclusion of the header, probably missing #pragma pop |
40 | # pragma warning (disable : 4103) |
41 | #endif |
42 | |
43 | #define AI_PUSHPACK_IS_DEFINED |
44 | |