无法初始化联合中的第二个项目

时间:2012-06-06 22:24:11

标签: c initialization unions

我与宣言有一个联盟:

union test_u
{
    int i;
    char *str;
};

我正在尝试使用代码

在“second”字段中初始化包含数据的变量
union test_u test = {"Sample"};  // char *, not int

在尝试编译时,我收到错误:

  

file.c:72:11:警告:初始化从没有强制转换的指针生成整数

是否可以按照我上面相同的方式初始化变量?编译器(在C89下)是否应该在初始化中接受intchar *

2 个答案:

答案 0 :(得分:5)

在C99中,可以使用designated initialisers

union test_u test = { .str = "Sample" };

答案 1 :(得分:2)

使用C89,只会初始化union的第一个成员。所以你可以改变union中变量的顺序:

union test_u
{
    char *str;
    int i;
};