Maison >développement back-end >C++ >Les structures anonymes du standard C sont-elles conformes ?
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!