语法:typedef和struct tag说明

时间:2016-09-20 23:45:12

标签: c syntax

以下示例:

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++

1 个答案:

答案 0 :(得分:1)

typedef表示Bookstruct Books的别名。无论你使用哪一个,都可以使用另一个。

唯一的例外是struct Books包含指向另一个struct Books的指针。在这种情况下,您不能使用别名。

编辑:

如果您使用前瞻性声明,则可以执行以上操作:

typedef struct Books Book;

struct Books {
   Book *moreBooks;
}

对于Books,它本身不是有效类型。您需要在其前面加上struct关键字。这与C ++不同,struct(或class)关键字在引用时是可选的。

编辑2:

在您提供的第二个代码示例中,Book是匿名结构的别名。在这种情况下,必须使用别名来引用它。