2016-09-20 91 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

您仍然可以在這種情況下使用別名(通過使用稍微不同的語法) –