我正在尝试返回带有初始化列表语法的结构。
我的结构是此的更大版本:
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] 删除。
我来说两句