我在(嵌入式)ARM 架构上运行。
我有一个结构Brown
:
typedef struct
{
float A;
float B;
float C;
}Brown;
一个压缩结构Abo
,包含Brown
:
#pragma pack(2)
typedef struct
{
Brown Left;
Brown Right;
}Abo;
Abo AboSent;
一个全局变量:
Brown Dest;
现在我想分配AboSent.Left
给全局变量Dest
(未打包):
Dest = AboSent.Left;
编译器给了我错误:
use of address of unaligned structure member
现在,当我在中间使用局部变量时,它编译得很好,没有警告:
Brown Test = AboSent.Left;
Dest = Test;
这是为什么?中间的局部变量是如何产生影响的?
我知道在传递未对齐的指针时会发生此警告,但这里它不是指针。