Maison >développement back-end >C++ >Les structures anonymes du standard C sont-elles conformes ?

Les structures anonymes du standard C sont-elles conformes ?

DDD
DDDoriginal
2024-12-07 07:30:12446parcourir

Are Anonymous Structs in C   Standard Compliant?

Structs anonymes : standard ou pas ?

Selon MSDN, les structures anonymes ne sont pas standard en C . Cependant, cette affirmation soulève la question de savoir si cette distinction est exacte.

Structures standard sans nom

La norme C (à la fois C 03 et C 11) permet la création de structures sans nom comme suit :

struct {
   int hi;
   int bye;
};

Ces structures sans nom peuvent être instanciées en tant que membres de autres structures :

struct Foo {
   struct {
      int hi;
      int bye;
   } bar;
};

Structs anonymes dans Visual C et GCC

Ce que l'on appelle souvent « structures anonymes » dans Visual C et GCC est légèrement différent. Ces structures permettent également d'accéder aux membres directement via l'objet parent :

struct Foo {
   struct { // No member name
      int hi;
      int bye;
   };
};

int main() {
   Foo f;
   f.hi = 3; // Access member without using nested struct
}

Structs anonymes non standard

Cette fonctionnalité d'accès aux membres directement via l'objet parent n'est pas standard. Il s'agit d'une extension Microsoft prise en charge dans Visual C et également par GCC. Les en-têtes de l'API Windows utilisent cette fonctionnalité « structure anonyme ». Cependant, il peut être désactivé en définissant NONAMELESSUNION avant d'inclure les fichiers d'en-tête Windows.

Différence par rapport aux unions anonymes

Les unions anonymes standard fournissent également un accès aux membres directement via l'objet parent. . Par exemple :

struct Foo {
   union { // No member name
      int hi;
      int bye;
   };
};

int main() {
   Foo f;
   f.hi = 3; // Access member without using nested union
}

Conclusion

Le terme « structure sans nom » dans la norme fait référence au type global, tandis que le terme « structure anonyme » utilisé dans Visual C et GCC font référence à la possibilité d'accéder aux membres directement via l'objet parent. Cette dernière fonctionnalité n'est pas standard, bien qu'elle reste largement prise en charge par les compilateurs populaires.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn