我与宣言有一个联盟:
union test_u
{
int i;
char *str;
};
我正在尝试使用代码
在“second”字段中初始化包含数据的变量union test_u test = {"Sample"}; // char *, not int
在尝试编译时,我收到错误:
file.c:72:11:警告:初始化从没有强制转换的指针生成整数
是否可以按照我上面相同的方式初始化变量?编译器(在C89下)是否应该在初始化中接受int
到char *
?
答案 0 :(得分:5)
在C99中,可以使用designated initialisers:
union test_u test = { .str = "Sample" };
答案 1 :(得分:2)
使用C89,只会初始化union的第一个成员。所以你可以改变union中变量的顺序:
union test_u
{
char *str;
int i;
};