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 成员。