C结构:typedef怀疑!
在给定的代码段中,我希望找不到错误C结构:typedef怀疑!,c,struct,typedef,C,Struct,Typedef,在给定的代码段中,我希望找不到错误符号记录。但它在VisualStudio2010编译器上编译并运行良好。我从VisualStudio2010命令提示符以C程序的方式运行它- cl记录.c 记录 现在的疑问是,typedef是否检查符号?它是否更像一个转发声明 #include "stdio.h" #include "conio.h" typedef struct Record R; struct Record { int a; }; int main() { R ob
符号记录
。但它在VisualStudio2010编译器上编译并运行良好。我从VisualStudio2010命令提示符以C程序的方式运行它-
cl记录.c记录 现在的疑问是,
typedef
是否检查符号?它是否更像一个转发声明
#include "stdio.h"
#include "conio.h"
typedef struct Record R;
struct Record
{
int a;
};
int main()
{
R obj = {10};
getch();
return 0;
}
您始终可以引用未定义的结构,毕竟这是实现链表的典型方法。当您想使用它们的字段时,只需定义它们。
包含一些详细信息。C找不到符号记录,因为它是在代码后面声明的,就像您试图使用在代码上声明过去但未定义其原型的函数一样 您还可以将这两个声明组合起来,然后变成:
typedef struct Record
{
int a;
} R;
它也可以工作,而且在我看来,甚至更好,不是因为它可以更快,而是因为它更小。
typedef
必须在定义第一个参数后使用
struct Record
{
int a;
};
typedef struct Record R;
或
如果需要在结构中使用
struct Record
,只需使用struct Record
:
typedef struct Record
{
struct Record *next;
}
typedef struct Record R;
尝试放置
typedef结构记录R代码>在struct Record…
@xhan下-如果我这样做,它是有意义的,因为符号Record
在前面找到。谢谢。您的代码在GCC(必须将getch更改为getchar)和VS2005下运行良好。我怀疑你的发现是对的。较小的可能重复是typedef结构{inta;}R;
typedef struct Record
{
struct Record *next;
}
typedef struct Record R;