编译错误在一个非常简单的C结构中。

15 浏览
0 Comments

编译错误在一个非常简单的C结构中。

此问题已有答案在此处:

typedef struct vs struct definitions [duplicate]

typedef struct test { 
    int a;
}; 
int main(void) { 
test t; 
t.a = 3; 
} 

上述代码无法编译。然而,当我将结构体更改为:

typedef struct {
    int a; 
}test; 

一切正常。为什么会这样?我已经看到了许多代码示例,结构体与typedef在同一行上,但这些代码都无法编译。

admin 更改状态以发布 2023年5月23日
0
0 Comments

当你在结构体中使用 typedef 时,结构体后面会跟着 typedef 名称。这是C语言的规定。

如果你使用第一种方式(显然没有使用 typedef),那么你必须使用 struct 关键字,而使用第二种方式你只需要用名称。

你还可以在结构体和 typedef 中使用相同的名称,例如

typedef struct test { 
    int a;
} test;

0
0 Comments

typedef 的一般语法为

 typedef type-declaration      alias-name;
          |                     |
          |                     |
          |                     |
 typedef struct {int a; }      test; //2nd one is correct
          |                     |              
          |                     |
 typedef struct test { int a;}    ;  //You missed the synonym/alias name here

Edit

请参考下面 Eric Postpischil 的评论

你将会得到一个 warning: useless storage class specifier in empty declaration 警告

参考: -这里

0