Недавно мы обнаружили код, представленный на нашей кодовой базе, в следующих строках:
#pragma pack(push,1)
struct xyzzy {
BITMAPINFOHEADER header;
char plugh;
long twisty;
} myVar;
Мой вопрос: упаковка распространяется только на непосредственную структуру или может повлиять на упаковку BITMAPINFOHEADER
. Я не вижу, чтобы последний случай был очень полезным, поскольку он мог бы отличить структуру от того, что вы получили бы от вызовов Windows API, например. В качестве примера предположим, что структура:
typedef struct {
char aChar;
DWORD biSize;
} BITMAPINFOHEADER;
Эта структура будет значительно отличаться от упаковки одной, а не стандартной по умолчанию для Windows (32-разрядная в любом случае, может быть шестнадцать для 64-разрядных).
Является ли BITMAPINFOHEADER
"защищенным" от упаковки в силу того, что он почти наверняка будет объявлен ранее? Если бы это было объявлено как часть внешней декларации, тогда она была бы подвергнута упаковке?