C typedef结构中定义前名称的用途
我遇到了上面的例子,在这个例子中,我只能使用Book定义对象,而使用Book给出未知类型。我知道我可以完全不用C typedef结构中定义前名称的用途,c,struct,typedef,C,Struct,Typedef,我遇到了上面的例子,在这个例子中,我只能使用Book定义对象,而使用Book给出未知类型。我知道我可以完全不用书籍,那么拥有它的目的是什么呢?你可以使用结构化书籍作为一种类型。这是英语的简写 typedef struct Books { char title[50]; char author[50]; char subject[100]; int book_id; } Book; 使用书籍会产生未知的类型 这很好。这表明您的编译器是最新的设计之一,遵循C编程的
书籍
,那么拥有它的目的是什么呢?你可以使用结构化书籍
作为一种类型。这是英语的简写
typedef struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
} Book;
使用书籍会产生未知的类型
这很好。这表明您的编译器是最新的设计之一,遵循C编程的当前趋势。正如您所发现的,使用名称book是多余的,甚至会产生警告/错误。(依赖于编译器)
使用以下语法,您可以简单地使用Book来声明struct Book的新实例(无需使用名称簿):
而且,它也倾向于使代码不那么冗长,即每次我们想要使用它声明新实例或在函数参数中使用它时,必须编写
结构书
,而不是只编写结构书
:您可以省略第一本书,如下所示:
typedef struct
{
char title[50];
char author[50];
char subject[100];
int book_id;
} Book;
Book book, *pBook; //etc.
但这对链表不起作用,在链表中,结构需要能够保存指向自身的指针:
typedef struct
{
char title[50];
char author[50];
char subject[100];
int book_id;
} Book;
行struct List*next
需要知道有一个名为List
的结构-这要求struct List
出现在该行之前
如果省略第二个,则每次要在程序的其余部分中使用它时,都需要键入struct Book
,而不是Book
。(有些人认为这是一个特性,而不是一个bug!)
(在C++中,第一个代码< <代码> >是足够的,不必在别处使用<代码>结构> /CODE,因此Type不有用。
< P>您的代码声明的唯一类型是typedef
从不声明类型,只为另一个类型创建新名称。例如
struct List
{
int data;
struct List * next; // this line requires that List appear with 'struct'
};
为int
创建两个可与int
互换的新名称,但未发明新的整数类型
对于由多个标记组成的类型名,typedef
是一个方便的工具,可以将其缩写为一个标记名
typedef int int0;
typedef int int1;
struct toto
的后一个函数甚至具有向前声明struct
的特殊性,因此您可以这样做
typedef unsinged long long int ullong;
typedef struct toto Toto;
也就是说,请在其自身定义中参考结构toto
标记名称空间与标识符名称空间不同,因此以下内容甚至是有效的
struct toto {
Toto* next;
};
那么我应该不能声明Book\t类型的对象吗?到目前为止,我还不能这么做。@ShamimHafiz-是的,但只使用
Book
,而不是struct Book
。他建议您现在可以使用Book
来声明struct Book\t的新实例。例如,Book Book,*pBook;创建struct Book\u t
的实例和指向struct Book\u t
struct toto {
Toto* next;
};
typedef struct toto toto;
struct toto {
toto* next;
};