如何解决用联合返回结构的初始化
我正在尝试返回具有初始化列表语法的结构。
我的结构是此结构的更大版本:
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 };
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。