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]; } };
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!