非常简单的C结构中的编译错误


Compilation error in a very simple C struct

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
typedef struct test {
    int a;
};

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

在以上不编译。然而,当这两个变化:struct

1
2
3
typedef struct {
    int a;
}test;

一切好的作品。这是为什么呢?在看过很多代码实例,在struct冰在相同的行为的类型,但它不是我编写的。


如果是一般的语法typedef

1
2
3
4
5
6
7
8
 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

编辑

在对国有企业postpischil埃里克

你只是把warning: useless storage class specifier in empty declaration

参考文献:本


当你使用具有结构typedef,名字是《typedef放后的结构。这是如何工作的,C是指定的。

如果你使用第一(《typedef显然没有),然后你要使用你的第二struct关键字,只要使用的名称。

你也可以使用相同的名称是《》和《typedef样结构。

1
2
3
typedef struct test {
    int a;
} test;


我的工作与conceptualize typedef从两个参数:

1
typedef"original type" "new type";

(我知道这是不是100%准确,但它是一个有用的方式来查看它是简单的)

中的:

1
2
typedef unsigned int HRESULT;
// HRESULT is a new type that is the same as an unsigned int.

在你的例子:

1
typedef struct test { int a; }  (Missing Second Parameter!) ;

你已经通过了第一个"停止",但你不structtest,给这个新的名称与第二类型的参数。

我想你想的是:

1
typedef struct { int a; }  test;

现在你已经采取的结构与单场(a),给出它的名称和test