通过指针访问union成员(如下例所示)会导致C99中的未定义行为吗?意图似乎很清楚,但我知道有关于别名和联盟的一些限制.
union { int i; char c; } u;
int *ip = &u.i;
char *ic = &u.c;
*ip = 0;
*ic = 'a';
printf("%c\n", u.c);
Run Code Online (Sandbox Code Playgroud) 我读到这个代码是根据c标准未定义但我无法找到原因.它在gcc 8.1.0和clang-6.0中编译没有错误并打印1.
代码如下:
#include <stdio.h>
int main()
{
union {
int i;
short s;
} u;
u.i = 42;
u.s = 1;
printf("%d\n", u.i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)