Opaque C structs: comment doivent-elles être déclarées?

J'ai vu les deux de la les deux styles de déclarer opaque types en C Api. Est-il un avantage évident à l'aide d'un style plus qu'un autre?

Option 1

//foo.h
typedef struct foo * fooRef;
void doStuff(fooRef f);

//foo.c
struct foo {
    int x;
    int y;
};

Option 2

//foo.h
typedef struct _foo foo;
void doStuff(foo *f);

//foo.c
struct _foo {
    int x;
    int y;
};
  • Voir aussi Est-ce une bonne idée de la définition de type des pointeurs?
  • Notez également que les noms commençant par un trait de soulignement sont pas une bonne idée dans le code de l'utilisateur (par opposition au système de code — la mise en œuvre). §7.1.3 "Réservés identifiants" de la norme: • Tous les identificateurs commençant par un trait de soulignement et une lettre majuscule ou un autre trait de soulignement sont toujours réservés pour toute utilisation. • Tous les identificateurs commençant par un caractère de soulignement sont toujours réservés pour une utilisation comme identificateurs de fichier portée à la fois l'ordinaire et le nom de la balise espaces.
  • Opaque exemple
  • (Un peu en retard à la fête, je sais, mais) j'ai juste proposé un exemple complet que Option 1.5, ici: stackoverflow.com/a/54488289/4561887.
InformationsquelleAutor splicer | 2010-10-19