【问题标题】:Unable to initialize second item in a union无法初始化联合中的第二项
【发布时间】:2012-08-15 01:34:37
【问题描述】:

我与声明有一个联合:

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

我正在尝试使用代码在“第二个”字段中使用数据初始化变量:

union test_u test = {"Sample"};  // char *, not int

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

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

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

【问题讨论】:

标签: c initialization unions


【解决方案1】:

在 C99 中,这可以使用 designated initialisers:

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

【讨论】:

  • 语法 str: "Sample" 在 C89 中也是可能的。 (不确定它是否是 GCC 扩展)。
  • @Cicada:您的语法是旧的 GCC 扩展(自 GCC 2.5 起已过时,但 GCC 支持 C99 语法作为 C89 的扩展):gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多