Return 使用联合初始化结构
Return initialisation of struct with union
我正在尝试 return 具有初始化列表语法的结构。
我的结构是这个的放大版本:
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.
我找到的唯一解决方案是将变量初始化为 return:
tagged_union func() {
tagged_union res = {a, 0};
return res;
}
所以我的问题是为什么第一个解决方案不可行?是否有任何技术限制阻止它包含在 C 语法中?
我想知道是否有其他解决方案可以用 return 打包初始化,因为在我的例子中,标签非常多,而且用于它的代码加倍似乎很乏味。
提前致谢。
您 可以 在 return
语句中包含初始化,但是,要这样做,您必须以某种方式将其转换为有效的 表达式。也许最简单的方法是使用 compound literal.
保持所有其他代码不变,下面的代码有效(但有一些关于 sub-objects 不使用大括号的警告):
tagged_union func()
{
return (tagged_union){ a, 0 };
}
我正在尝试 return 具有初始化列表语法的结构。
我的结构是这个的放大版本:
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.
我找到的唯一解决方案是将变量初始化为 return:
tagged_union func() {
tagged_union res = {a, 0};
return res;
}
所以我的问题是为什么第一个解决方案不可行?是否有任何技术限制阻止它包含在 C 语法中? 我想知道是否有其他解决方案可以用 return 打包初始化,因为在我的例子中,标签非常多,而且用于它的代码加倍似乎很乏味。
提前致谢。
您 可以 在 return
语句中包含初始化,但是,要这样做,您必须以某种方式将其转换为有效的 表达式。也许最简单的方法是使用 compound literal.
保持所有其他代码不变,下面的代码有效(但有一些关于 sub-objects 不使用大括号的警告):
tagged_union func()
{
return (tagged_union){ a, 0 };
}