6

Cでは、fooが構造体の場合、単に「foo」ではなく「struct foo」と書くことに違いはありますか?

例えば:

struct sockaddr_in sin;
struct sockaddr *sa;

// Are these two lines equivalent?
sa = (struct sockaddr*)&sin;
sa = (sockaddr*)&sin;

ありがとう/エリック

4

4 に答える 4

11

struct実際、標準の「C」では、キーワードを指定する必要があります。これは C++ ではオプションです。

これが、一部の人々が次のような構造体を定義する理由です。

typedef struct foo { ... } bar;

barの代わりに使用できるようにしますstruct foo。ただし、一部の C コンパイラはこの規則を適用しません。

于 2009-01-09T12:17:01.957 に答える
6

はい。C (C++ とは対照的に) では、構造体は独自の名前空間にあります。したがって、

struct sockaddr { ... }

として使用することはできません。

sockaddr s;
sockaddr *ps;

それを有効にするために、型名の非構造体名前空間にインポートするために typedef を使用できます。

typedef struct sockaddr { ... } sockaddr;
sockaddr s, *p;
于 2009-01-09T12:17:38.350 に答える
0

typedef する場合は、「foo」だけを使用できます。

于 2009-01-09T12:17:37.993 に答える
0

構造体の定義方法によって異なります。typedef を使用して定義されている場合は、stuct キーワードを前に置く必要はありません。

typedef struct 
{
//
} aStruct;

aStruct abc;

ただし、typedef でない場合は、struct キーワードが必要です。

struct aStruct
{
//
} ;

struct aStruct abc;
于 2009-01-09T12:18:00.877 に答える