错误,而尝试将结构传递给函数

在下面的程序中,我尝试将一个结构传递给一个函数。 但是我得到的错误,我不明白为什么。 我在这个程序中犯了什么错误?

我使用gcc来编译这个c程序。

 #include <stdio.h> struct tester { int x; int *ptr; }; void function(tester t); int main() { tester t; tx = 10; t.ptr = & tx; function(t); } void function(tester t) { printf("%d\n%p\n",tx,t.ptr); } 

错误:

 gcc tester.c -o tester tester.c:8:15: error: unknown type name 'tester' tester.c: In function 'main': tester.c:12:2: error: unknown type name 'tester' tester.c:13:3: error: request for member 'x' in something not a structure or union tester.c:14:3: error: request for member 'ptr' in something not a structure or union tester.c:14:13: error: request for member 'x' in something not a structure or union tester.c: At top level: tester.c:18:15: error: unknown type name 'tester' 

注意如果我用coutstdioreplaceprintfiostream ,并将扩展命名为.cpp (!),则不会出现错误。 这是为什么 ? 难怪我用g++编译它

如果你不用typedef结构体,你必须在结构体名称前面指定struct,同时声明如下:

 struct tester t; 

要么你这样做,要么你做下面的事情:

 typedef struct { int x; int *ptr; }tester; 

更新

下面是从下面的帖子Adam Rosenfield引用C ++中的“struct”和“typedef struct”之间的区别? :

在C ++中,只要名称不被具有相同名称的另一个声明隐藏,所有的struct / union / enum / class声明就像是隐式的typedef处理一样。

你的结构没有被命名。 或者使用struct tester t; 或者是一个typedef

问题在于你想用gcc编译,这是一个“c语言”编译器,而你正在遵循C ++风格的代码。
可以通过structname variablename创建一个结构体变量;
但在c ++中,你明确地告诉编译器它是一个结构
struct structname variablename; 只要做到这一点,你会没事的,否则你可以使用一个typedef,基本上你现在告诉编译器的形式,你将打电话给结构测试人员只有测试人员,这将更适合你,因为你只需要一个小的更改。