Différence entre “struct foo *” et “foo *” où foo est une struct?
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
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;