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) { ... };