(組み込み) 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;
何故ですか?真ん中のローカル変数がどのように違いを生んだのですか?
この警告は、アラインされていないポインターを渡すときに発生することを知っていますが、ここではポインターではありません。