用联合返回结构的初始化

香蕉

我正在尝试返回带有初始化列表语法的结构。

我的结构是此的更大版本:

typedef enum A {
  a,
  b,
} A;
    
typedef struct tagged_union {
  A tag;
  union {
    int a_value;
    float b_value;
  };
}tagged_union;

我有此实现的功能:

tagged_union func() {
  return {a, 0};
}

但这向我发送以下错误:

error: expected expression
  return {a, 0};
         ^
1 error generated.

我发现的唯一解决方案是初始化变量以返回:

tagged_union func() {
  tagged_union res = {a, 0};
  return res;
}

所以我的问题是为什么第一个解决方案不可行?是否有任何技术限制使其无法包含在C语法中?我想知道是否还有其他方法可以将初始化与返回包装在一起,因为在我的情况下,标签数量很多,并且将用于此目的代码加倍似乎很乏味。

提前致谢。

阿德里安·摩尔

可以return语句中包含初始化,但要这样做,您必须以某种方式将其转换为有效的表达式也许最简单的方法是使用复合文字

在不更改所有其他代码的情况下,以下工作(但带有一些警告,提醒您不要对子对象使用花括号):

tagged_union func()
{
    return (tagged_union){ a, 0 };
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章