【问题标题】:C initialize struct in switch caseC在switch case中初始化结构
【发布时间】:2016-10-12 18:35:01
【问题描述】:

所以我的代码中有以下“形状”:

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 认为我在做什么?这样做的干净方法是什么?

【问题讨论】:

    标签: c gcc switch-statement


    【解决方案1】:

    使用compound literals:

    t = (mystruct) { ... };
    

    C99+ 支持,但作为 C90 的 GCC 扩展支持。

    【讨论】:

    • 谢谢。不幸的是,我必须使用 C89。对我来说不方便...... :(
    • @HermanGhandi 好的,这很不幸,但是,如果我可能会问,你为什么需要使用 C89?它已经完全过时了。
    • 大学电脑就是这样。他们可以编译 C99,但带有评分者可能不使用或不喜欢的标志。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      相关资源
      最近更新 更多