C在开关情况下初始化结构

C在开关情况下初始化结构,c,gcc,switch-statement,C,Gcc,Switch Statement,因此,我的代码中有以下“形状”: mystruct t; switch(something){ case THIS: t = {/*initialization*/}; break; case THAT: t = {/*initialization*/}; break; case AND_THE_OTHER: t = {/*initialization*/};

因此,我的代码中有以下“形状”:

mystruct t;
switch(something){
    case THIS:
        t = {/*initialization*/};
        break;
    case THAT:
        t = {/*initialization*/};
        break;           
    case AND_THE_OTHER:
        t = {/*initialization*/};
        break;
}
gcc
坚持在
{
之前应该有一个表达式:

error: expected expression before '{' token
    t = {
        ^

为什么?
gcc
认为我在做什么?最简单的方法是什么?

你所做的是赋值,而不是初始化。初始化只能在定义变量时执行。大括号可以用来初始化变量,但不能用来赋值


您需要单独分配结构的每个成员。

您所做的是分配,而不是初始化。初始化只能在定义变量时执行。大括号可用于初始化变量,但不能用于分配

您需要单独分配结构的每个成员。

使用:

C99+支持此功能,但GCC支持将其作为C90的扩展。

使用:


C99+支持此功能,但GCC支持将其作为C90的扩展。

谢谢。不幸的是,我必须使用C89。对我来说不方便…:(@HermanGhandi好的,这很不幸,但是,如果我可以问的话,你为什么需要使用C89?它完全过时了。大学的计算机就是这样。它们可以编译C99,但带有评分员可能不使用或不喜欢的标志。谢谢。不幸的是,我必须使用C89。对我来说不方便…:(@HermanGhandi好吧,那很不幸,但是,如果我可以问的话,你为什么需要使用C89?它完全过时了。大学的计算机就是这样。它们可以编译C99,但带有评分员可能不使用或不喜欢的标志。
t = (mystruct) { ... };