Cでは、fooが構造体の場合、単に「foo」ではなく「struct foo」と書くことに違いはありますか?
例えば:
struct sockaddr_in sin;
struct sockaddr *sa;
// Are these two lines equivalent?
sa = (struct sockaddr*)&sin;
sa = (sockaddr*)&sin;
ありがとう/エリック
struct
実際、標準の「C」では、キーワードを指定する必要があります。これは C++ ではオプションです。
これが、一部の人々が次のような構造体を定義する理由です。
typedef struct foo { ... } bar;
bar
の代わりに使用できるようにしますstruct foo
。ただし、一部の C コンパイラはこの規則を適用しません。
はい。C (C++ とは対照的に) では、構造体は独自の名前空間にあります。したがって、
struct sockaddr { ... }
として使用することはできません。
sockaddr s;
sockaddr *ps;
それを有効にするために、型名の非構造体名前空間にインポートするために typedef を使用できます。
typedef struct sockaddr { ... } sockaddr;
sockaddr s, *p;
typedef する場合は、「foo」だけを使用できます。
構造体の定義方法によって異なります。typedef を使用して定義されている場合は、stuct キーワードを前に置く必要はありません。
typedef struct
{
//
} aStruct;
aStruct abc;
ただし、typedef でない場合は、struct キーワードが必要です。
struct aStruct
{
//
} ;
struct aStruct abc;