Question

En C, existe-t-il une différence entre l'écriture de "struct foo"? au lieu de "foo" si foo est une structure?

Par exemple:

struct sockaddr_in sin;
struct sockaddr *sa;

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

Merci / Erik

Était-ce utile?

La solution

En fait, dans la norme " C " il est nécessaire de spécifier le mot clé struct . Ceci est facultatif en C ++.

C’est la raison pour laquelle certaines personnes définissent des structures comme ceci:

typedef struct foo { ... } bar;

pour pouvoir utiliser bar au lieu de struct foo . Cependant, certains compilateurs C n’appliquent pas cette règle.

Autres conseils

Oui. En C (par opposition à C ++), les structures sont dans leur propre espace de noms. Donc, si vous avez défini un

struct sockaddr { ... }

vous ne pouvez pas l'utiliser comme

sockaddr s;
sockaddr *ps;

Pour rendre cela légal, vous pouvez utiliser typedef afin d'importer dans l'espace de noms de type non-struct de noms de type:

typedef struct sockaddr { ... } sockaddr;
sockaddr s, *p;

Vous pouvez utiliser uniquement "foo". si vous le tapez

Cela dépend de la définition de la structure. S'il est défini à l'aide d'un typedef, vous n'avez pas à mettre le mot-clé stuct devant.

typedef struct 
{
//
} aStruct;

aStruct abc;

mais si ce n'est pas un typedef, vous avez besoin du mot clé struct.

struct aStruct
{
//
} ;

struct aStruct abc;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top