Maison > développement back-end > C++ > Pourquoi C n'autorise-t-il pas les structures anonymes tout en autorisant les unions anonymes ?

Pourquoi C n'autorise-t-il pas les structures anonymes tout en autorisant les unions anonymes ?

Susan Sarandon
Libérer: 2024-12-11 15:25:12
original
662 Les gens l'ont consulté

Why Doesn't C   Allow Anonymous Structs While Permitting Anonymous Unions?

La justification de l'interdiction des structures anonymes en C

Les compilateurs C peuvent autoriser l'utilisation d'unions et de structures anonymes comme extensions de la norme . Cependant, la norme elle-même autorise uniquement les unions anonymes, pas les structures anonymes. Qu'est-ce qui se cache derrière cet écart ?

La raison vient de la compatibilité avec C. C prend en charge les unions anonymes, mais pas les structures anonymes. Pour assurer la compatibilité, C intègre des unions anonymes dans son langage. Cependant, il n'y a aucune exigence de compatibilité avec les structures anonymes en C, elles sont donc omises de la norme.

De plus, les structures anonymes ne servent à rien en C . L'exemple fourni, où une structure contient trois flottants accessibles via .v[i] et .x, .y, .z, est considéré comme un comportement non défini en C . Il est déconseillé d'écrire à un membre d'un syndicat (.v[1]) et de lire depuis un autre (.y).

C propose des solutions alternatives via des types définis par l'utilisateur. Par exemple :

struct vector3 {
  float v[3];
  float &operator[](int i) { return v[i]; }
  float &x() { return v[0]; }
  float &y() { return v[1]; }
  float &z() { return v[2]; }
};
Copier après la connexion

Ce code fournit la fonctionnalité souhaitée tout en respectant les standards C. Il serait prudent d'utiliser des structures définies pour gérer les données plutôt que des structures anonymes, même si elles sont possibles dans certaines extensions du compilateur.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal