在 C 中 return 联合的有效方法?

Efficient way to return a union in C?

我有一个 return 是联合的函数,调用者知道如何处理它。 return 联合是否有有效的单行方式?我现在做什么:

typedef union { int i; char *s; double d; } FunnyResponse;
FunnyResponse myFunc () {
    // Tedious:
   FunnyResponse resp; 
   resp.d = 12.34;
   return resp;
}
int main () {
   printf ("It's this: %g\n", myFunc().d);
}

这会编译并运行,但是如果可能的话,我希望有一个 "return" 行。有什么想法吗?

你可以使用 C99 的 designated initializers and compound literals:

return (FunnyResponse){ .d = 12.34 };

对于 ANSI C89(Microsoft 的 C 编译器),您必须按照现在的操作来获得相同的效果。