Здравствуйте, уважаемые специалисты!
Данное предупреждение может привести к неверному присвоению? Что нужно сделать, чтобы его не было?
typedef struct
{
union
{
unsigned char data[8];
struct
{
struct
{
unsigned long a1: 1;
unsigned long a2: 31;
};
unsigned long a3;
};
};
} test_t;
typedef struct
{
union
{
unsigned long b1[2];
unsigned char b2[8];
};
} test2_t;
void f_test()
{
test2_t t2 = {{{0, 0}}};
test_t* t = (void*)&t2;
t->a1 = 1;
t->a2 = 1;
t->a3 = 1;
}
Предупреждения:
main.c:68: warning: dereferencing pointer 't' does break strict-aliasing rules
main.c:67: warning: dereferencing pointer 't' does break strict-aliasing rules
main.c:66: warning: dereferencing pointer 't' does break strict-aliasing rules