C言語で構造体を定義したとします。その構造体のインスタンスを宣言する場合、その前に 'struct'キーワードを含める必要があります。C言語のstructインスタンスの前に 'struct'キーワードを指定する必要があるのはなぜですか?
// Define struct
struct Book {
char title[50];
char author[50];
char subject[100];
int book_id;
};
// Instantiate struct
int main()
{
struct Book myBook;
}
私の質問:構造体のキーワードは、構造体の任意のインスタンス化の前にするために、なぜそれが必要なのか?コンパイラには、 'Book'が構造体であることを控除するための情報がたくさんあるようです。
typedefを使ってこの問題を回避することができますが、コンパイラが知っているはずのボイラープレートコードのように思えます。
Cでは、構造体と共用体はそれぞれ、グローバル名前空間とは異なる独自の名前空間を持ちます。 'struct'と言って、構造体の名前空間を調べるようにしなければなりません。 –
@RaymondChen:タグの名前空間は、構造体、共用体、列挙型の間で共有されます。たとえば、同じ範囲に 'struct foo'と' union foo'の両方を持つことはできません。ラベルは 'struct'と' union'メンバと同じように、独自の名前空間を取得します。他のすべての識別子(変数名、関数名、列挙定数など)は、「通常の識別子」名前空間にまとめられます。 –