Quelle est la syntaxe est la bonne façon de déclarer une structure C?

J'ai vu C structs déclaré plusieurs manières différentes en avant. Pourquoi est-ce et que, si quoi que ce soit, ne faire de différent?

Par exemple:

struct foo {
  short a;
  int b;
  float c;
};

typedef struct {
  short d;
  int e;
  float f;
} bar;

typedef struct _baz {
  short a;
  int b;
  float c;
} baz;

int main (int argc, char const *argv[])
{
  struct foo a;
  bar b;
  baz c;

  return 0;
}
  • Ce n'est pas la réponse à votre question pour le C, mais je crois qu'ils sont tous corrects pour le C++, mais le premier est préféré. Cela peut aussi avoir changé entre les différentes versions de C, mais je vais laisser quelqu'un d'autre en parler, puisque je ne suis pas spécialiste de l'histoire de C/C++.
  • C++ est différente: lorsque vous écrivez struct Foo { }; ou class Foo { }; là, vous obtenez Foo gratuitement sans typedef.
  • Ils seront tous encore du travail, mais, même si l'on peut faire des choses légèrement différentes (comme polluer votre espace de noms w/ extra tags).
  • Pas exactement. class X vous permet de déclarer X x;, mais X est toujours dans le class / struct tag de noms, ce qui permet aux gens d'essayer des choses désagréables comme class singleton { ... } singleton;
  • Notez que l'utilisation des principaux traits de soulignement dans votre struct noms de balise est presque certainement incorrecte. Il peut casser des choses et ne sert aucun but. Ne pas le faire.
InformationsquelleAutor Mark Sands | 2011-01-15