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