struct __packed element {
char val;
};
void foo(struct element arr[4], uint32_t a) {
uint32_t* i = (uint32_t*)arr;
*i = a;
}
int main(void) {
struct element arr[4] __aligned(4);
foo(arr, 5);
...
}
タイトルと同じくらい、これはCの厳密なエイリアシング違反ですか? ARRの保存されたタイプは、それはあなたがelement arr[4]
を読んで、そしてarr
が割り当てられた方法についてのだろうかに依存struct element[4]
厳密なエイリアシング違反ですか?
文字タイプを使用して、他のタイプを指すことができます。 –
あなたのキャストは壊れていますので、あなたはUBを持っています。 – Stargateur
'__packed'はすでにC標準の外にいます –