我注意到,当在结构周围使用#pragma pack 时,它内部的对齐方式不仅受到影响,而且结构本身的对齐方式也会发生变化。考虑以下:
#include <stdio.h>
#include <stdint.h>
#pragma pack(1)
typedef struct _TEST
{
uint32_t a;
} TEST;
#pragma pack()
volatile uint8_t n;
TEST b;
int main()
{
printf("Address %lX rem %lu\n", (long unsigned int)&b, (long unsigned int)(&b)%(sizeof(int)));
return 0;
}
你可以试试这个代码在这里:https ://onlinegdb.com/BkebdxZEU
程序返回Address 601041 rem 1
,这意味着编译指示也对结构产生了对齐(1)的影响。
这是为什么?这是定义的行为吗?