構造体を宣言するこれらの2つの方法の違いは何ですか?
最初の方法:
struct x {};
2番目の方法:
struct _x {} x;
最初はタイプのみを定義しますstruct x
。2番目はタイプstruct _x
を定義し、。という名前のそのタイプの変数を定義しますx
。
おそらくあなたが考えていたものではありませんが、アンダースコアで始まる名前_x
はファイルスコープで予約されているため、これが他のスコープ内にない限り、2番目の名前の動作は未定義です。
struct _x
2番目の方法は、typeという名前の変数と、という名前のこのタイプの変数を宣言しますx
。最初のものはタイプを宣言するだけstruct x
です。
2番目の方法は基本的にと同じです
struct _x{}; // define a type
struct _x x; // allocate a variable of type struct _x