无法弄清楚紧凑结构声明的语法

时间:2010-01-26 11:39:53

标签: c struct

这些代码片段都不起作用:

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'声明就在这里

正确的方法吗?

5 个答案:

答案 0 :(得分:4)

复合文字作业是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";

答案 1 :(得分:2)

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

    return 0;
}

答案 2 :(得分:1)

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

这可以在初始化期间完成,因为您已经初步化了'e'作为结构声明的一部分,所以您无法跟进它。我推荐Neil's方法。

答案 3 :(得分:0)

一次性初始化成员,如下所示:

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;
 }

答案 4 :(得分:0)

这有效:

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

    return 0;
}