Надеюсь, что нет! Допустим, у вас есть функция, которая принимает параметр struct A:
void fn( struct A x ) ;
и затем упакованная структура B, которая имеет структуру A в качестве члена:
#pragma pack(1)
struct B
{
struct A a ;
}
Если вы передадите элемент a из B функции fn (), функция не будет знать об упаковке в этом случае и завершится ошибкой.
Несмотря на результаты других ответчиков, я выполнил следующий тест на VC ++ 2010:
struct A
{
int a;
char b;
int c ;
} ;
struct B
{
struct A d ;
} ;
#pragma pack(1)
struct C
{
struct A d ;
} ;
#pragma pack(1)
struct D
{
int a;
char b;
int c ;
} ;
#pragma pack(1)
struct E
{
struct D ;
} ;
int main()
{
int a = sizeof(struct A) ;
int b = sizeof(struct B) ;
int c = sizeof(struct C) ;
int d = sizeof(struct D) ;
int e = sizeof(struct E) ;
}
Проверка a, b, c, d и e в main () в отладчике дает:
- а = 12
- b = 12
- с = 12
- d = 9
- е = 9
Упаковка struct C
не влияет на размер элемента struct A.