我有以下 struct :
typedef struct __attribute__ ((__packed__))
{
uint16_t a;
uint32_t b;
} st_t;
-&燃气轮机;"b"成员未对齐.
当我执行以下操作时,gcc会发出警告:
st_t st;
uint32_t * b_p = &st.b;
*b_p = 0;
警告日志(log):
taking address of packed member of 'struct <anonymous>' may result in an unaligned pointer value
但当我执行以下操作时,它不会发出任何警告:
st_t st;
st_t * st_p = &st;
st_p->b = 0;
我不明白为什么在第二种情况下它没有发出警告,因为我仍然在访问一个未对齐的成员.