【问题标题】:Can't figure out syntax of compact struct declarations无法弄清楚紧凑结构声明的语法
【发布时间】:2010-01-26 11:39:53
【问题描述】:

这些sn-ps代码都不起作用:

int main() {
    struct mystruct {
        int a;
        char* b;
        char* c;
    } e,f;
    e = {5, "blaat", "boe"};

    return 0;
}

错误:“{”标记的语法错误

int main() {
    struct mystruct {
        int a;
        char* b;
        char* c;
    } e,f;
    struct mystruct e = {5, "blaat", "boe"};

    return 0;
}

错误:'e' 的先前声明在这里

正确的方法是什么?

【问题讨论】:

  • C99 允许在声明之外进行结构赋值,因此您的第一个代码 sn-p 对于 C99 编译器应该没问题
  • 看看这里的另一个问题,关于交换结构,使用数组,仔细阅读代码......它会帮助你......stackoverflow.com/questions/2138872/…

标签: c struct


【解决方案1】:

复合字面量赋值是 C99 的新功能,语法为

e = (struct mystruct) {5, "blaat", "boe"};

强制转换表达式是必需的。

在 C89 中,您要么必须初始化 e 作为声明的一部分:

struct mystruct {int a; char *b; char *c} e = {5, "blaat", "boe"};

struct mystruct e = {5, "blaat", "boe"};

或者您必须单独分配成员:

struct mystruct e;
e.a = 5;
e.b = "blaat";
e.c = "boe";

【讨论】:

    【解决方案2】:
    int main() {
        struct mystruct {
            int a;
            char* b;
            char* c;
        } f;
        struct mystruct e = {5, "blaat", "boe"};
    
        return 0;
    }
    

    【讨论】:

      【解决方案3】:
      e = {5, "blaat", "boe"};
      

      只能在初始化期间完成,并且由于您已经将“e”初始化为结构声明的一部分,因此您无法跟进。我推荐Neil's方法。

      【讨论】:

      • 在 C99 中不再是这样,但是给定的语法是错误的:struct mystruct e; ... e = (struct mystruct){5, "blah", "boe"};这将 e 分配给“复合文字”,并使用为所有结构创建的隐式分配(被翻译成类似于内联 memcopy() 调用的东西)。
      【解决方案4】:

      或者像下面这样一次性初始化成员:

      int main() {
      struct mystruct {
          int a;
          char* b;
          char* c;
      } f;
        struct mystruct e = {5, "blaat", "boe"};
      
        return 0;
      }    
      

      或稍后为它们分配值,如下所示:

      int main() {
       struct mystruct {
          int a;
          char* b;
          char* c;
       }e,f;
      
       /* a,b,c are initialized with unknown values */
      
         e.a=5; /*Assignment instead of initialization*/
         e.b="blaat";
         e.c="boe";
      
         return 0;
       }
      

      【讨论】:

        【解决方案5】:

        这行得通:

        int main() {
            struct mystruct {
                int a;
                char* b;
                char* c;
            } e = {5, "blaat", "boe"}, f;
        
            return 0;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-05-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-21
          相关资源
          最近更新 更多