以下示例:
typedef struct Books {
char title[50];
char author[50];
int book_id;
} Book;
然后可以使用Book
来声明变量,例如:
Book myBook;
但是Books
的含义是什么?它是如何使用的,或者为什么需要它?
我主要对普通C感兴趣,但如果你能解释一下C ++也会很棒。
- 编辑 -
更具体地说,代码上面和下面的代码有什么区别:
typedef struct {
char title[50];
char author[50];
int book_id;
} Book;
为什么我们在第一个例子中需要额外的文字?
在这里找到了很好的解释: Tag vs. Type Names in C and C++
答案 0 :(得分:1)
typedef
表示Book
是struct Books
的别名。无论你使用哪一个,都可以使用另一个。
唯一的例外是struct Books
包含指向另一个struct Books
的指针。在这种情况下,您不能使用别名。
编辑:
如果您使用前瞻性声明,则可以执行以上操作:
typedef struct Books Book;
struct Books {
Book *moreBooks;
}
对于Books
,它本身不是有效类型。您需要在其前面加上struct
关键字。这与C ++不同,struct
(或class
)关键字在引用时是可选的。
编辑2:
在您提供的第二个代码示例中,Book
是匿名结构的别名。在这种情况下,必须使用别名来引用它。