Return C 中的联合,但让它看起来不错
Return a union in C, but make it look nice
所以,我有一个工会:
typedef union {
int intVal;
char charVal;
bool boolVal;
} myUnion_t;
我有一个函数,foo
,(与后一个联合在同一个文件中)它将 return myUnion_t
.
我显然可以做到:
myUnion_t foo(int n){
myUnion_t rtn;
if(n == 0){
rtn.intVal = 1;
} else if(n == 1){
rtn.charVal = 'b';
} else {
rtn.boolVal = false;
}
return rtn;
}
但这有点乱;我的 CDO 不喜欢它。有没有更好的方法来做到这一点,比如:
myUnion_t foo(int n){
if(n == 1){
return 1;
} else if(n == 2){
return 'b';
} else {
return false;
}
}
编辑:好吧,联合本质上是混乱的。感谢您的帮助,我会按正常方式进行:)
虽然您不能 return union
成员的值代替 union
本身,但您可以使用 compound literals of C99 来避免声明 union
在顶部并将其字段设置在初始值设定项之外:
typedef union object_t {
int intVal;
char charVal;
_Bool boolVal;
} object_t;
object_t foo(char ch){
switch(ch) {
case 'a': return (object_t) { .intVal = 4 };
case 'b': return (object_t) { .charVal = 'b' };
default: return (object_t) { .boolVal = true };
}
}
您需要使用复合文字的原因是类型本身不足以识别您想要分配的 union
成员。
所以,我有一个工会:
typedef union {
int intVal;
char charVal;
bool boolVal;
} myUnion_t;
我有一个函数,foo
,(与后一个联合在同一个文件中)它将 return myUnion_t
.
我显然可以做到:
myUnion_t foo(int n){
myUnion_t rtn;
if(n == 0){
rtn.intVal = 1;
} else if(n == 1){
rtn.charVal = 'b';
} else {
rtn.boolVal = false;
}
return rtn;
}
但这有点乱;我的 CDO 不喜欢它。有没有更好的方法来做到这一点,比如:
myUnion_t foo(int n){
if(n == 1){
return 1;
} else if(n == 2){
return 'b';
} else {
return false;
}
}
编辑:好吧,联合本质上是混乱的。感谢您的帮助,我会按正常方式进行:)
虽然您不能 return union
成员的值代替 union
本身,但您可以使用 compound literals of C99 来避免声明 union
在顶部并将其字段设置在初始值设定项之外:
typedef union object_t {
int intVal;
char charVal;
_Bool boolVal;
} object_t;
object_t foo(char ch){
switch(ch) {
case 'a': return (object_t) { .intVal = 4 };
case 'b': return (object_t) { .charVal = 'b' };
default: return (object_t) { .boolVal = true };
}
}
您需要使用复合文字的原因是类型本身不足以识别您想要分配的 union
成员。