2016-09-20 50 views
-3

在下面的例子:语法的:typedef和struct标签说明

typedef struct Books { 
    char title[50]; 
    char author[50]; 
    int book_id; 
} Book; 

Book可以使用,那么,要声明的变量,如:

Book myBook; 

但什么Books意思?如何使用它,或为什么我们需要它? 我主要对纯C感兴趣,但是如果你可以解释一下C++,它将会很棒。

--edited--

更具体地讲,什么样的代码上面和下面的代码之间的区别:

typedef struct { 
    char title[50]; 
    char author[50]; 
    int book_id; 
} Book; 

为什么我们永远需要在第一个例子中额外的文字?

发现这里很好的解释: Tag vs. Type Names in C and C++

+0

谢谢,dbush。我也看到了相同的代码,但没有'书籍'文字。有什么不同? –

+0

从C书的解释中你不了解什么?你的具体**问题是什么?有许多教程和C书可以找到。 – Olaf

+0

Olaf,我试图找到信息,但在教程中,所有的解释都围绕着'Book'别名,但是关于这个例子的说明是关于'Books'的。 –

回答

1

typedefBookstruct Books的别名。无论你使用哪一个,都可以使用另一个。

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

编辑:

可以做到上面,如果你使用一个向前声明:

typedef struct Books Book; 

struct Books { 
    Book *moreBooks; 
} 

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

编辑2:

在你给第二个代码示例,Book为匿名结构的别名。在这种情况下,必须使用别名来引用它。

+1

您仍然可以在这种情况下使用别名(通过使用稍微不同的语法) –