Maison >développement back-end >C++ >Pourquoi les initialiseurs désignés ont-ils été exclus de C 11 ?

Pourquoi les initialiseurs désignés ont-ils été exclus de C 11 ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-28 10:52:14128parcourir

Why Were Designated Initializers Excluded from C  11?

Initialiseurs désignés dans C 11 : justification de l'exclusion

Alors que C99 permet l'utilisation de listes d'initialiseurs désignés, comme dans l'extrait de code fourni , C 11 interdit cette fonctionnalité. Cette décision du comité standard C 11 soulève la question de savoir pourquoi une fonctionnalité aussi pratique a été exclue.

C.1.7[diff.decl].4 : Restrictions en C  :

L'introduction d'initialiseurs désignés en C aurait posé plusieurs défis :

  • Évaluation indéterminée Ordre : En C99, l'ordre d'évaluation des initialiseurs désignés n'est pas spécifié, ce qui conduit à un comportement potentiellement indéfini si les membres initialisés interagissent. En revanche, C applique un ordre d'évaluation strict pour les listes d'initialiseurs, évitant ainsi de tels problèmes.
  • Comportement incohérent avec C99 : autoriser les initialiseurs désignés en C aurait nécessité de rompre la compatibilité avec les implémentations C99 existantes, ce qui faire appliquer une ordonnance d’évaluation spécifique. Cela aurait introduit des problèmes potentiels de portabilité.
  • Désignateurs imbriqués et initialisations de tableaux : C99 autorise également les désignateurs imbriqués et l'initialisation désignée par tableau, ce qui aurait ajouté encore plus de complexité au langage C et soulevé des inquiétudes concernant comportement incohérent.

Conclusion :

Le comité de norme C 11 a soigneusement examiné ces limitations techniques, ainsi que le potentiel de problèmes de compatibilité et de comportement incohérent, lorsqu'il a choisi d'exclure les listes d'initialiseurs désignées. Au lieu de cela, C fournit un ordre d'évaluation strict pour les listes d'initialiseurs afin de garantir un comportement prévisible et de maintenir la compatibilité avec ses règles existantes.

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