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
Libérer: 2024-12-07 07:30:12
original
479 Les gens l'ont consulté

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;
};
Copier après la connexion

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

struct Foo {
   struct {
      int hi;
      int bye;
   } bar;
};
Copier après la connexion

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
}
Copier après la connexion

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
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal