用联合返回结构的初始化

问题描述

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

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

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语句中,但是,您必须以某种方式将其转换为有效的 expression 。也许最简单的方法是使用compound literal

在不更改所有其他代码的情况下,可以进行以下工作(但有一些关于不对子对象使用大括号的警告):

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...