Эффективный способ вернуть объединение в C? - PullRequest
2 голосов
/ 04 октября 2019

У меня есть функция, которая возвращает объединение, которое вызывающий знает, как обрабатывать. Есть ли эффективный однострочный способ вернуть объединение? Что я делаю сейчас:

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", если это возможно. Есть идеи?

1 Ответ

6 голосов
/ 04 октября 2019

Вы можете использовать обозначенные инициализаторы C99 и составные литералы :

return (FunnyResponse){ .d = 12.34 };

Для ANSI C89 (компилятор Microsoft C) вам придется делать то, чтоВы делаете сейчас, чтобы получить тот же эффект.

...