Maison > développement back-end > C++ > Pourquoi les initialiseurs désignés étaient-ils absents de C 11 ?

Pourquoi les initialiseurs désignés étaient-ils absents de C 11 ?

Barbara Streisand
Libérer: 2024-12-08 21:11:11
original
679 Les gens l'ont consulté

Why Were Designated Initializers Absent from C  11?

Initialiseurs désignés en C : Pourquoi l'absence en C 11

L'omission des initialiseurs désignés en C 11 reste une question intrigante pour de nombreux programmeurs . En C99, la syntaxe d'initialisation désignée, telle que .age = 18, permet une initialisation pratique de membres spécifiques d'une structure. Cependant, cette fonctionnalité est notamment absente de C 11.

Justification de l'exclusion

Le comité de norme C 11 a refusé à plusieurs reprises les propositions d'initialiseurs désignés. Leur justification découle de plusieurs complexités inhérentes :

Ordre d'exécution indéterminé :
C99 ne dispose pas de règles spécifiques pour évaluer les expressions d'initialisation désignées. L'ordre dans lequel les évaluations ont lieu est indéterminé, ce qui peut conduire à des incohérences dans le comportement du programme. En revanche, C applique un ordre strict d'évaluation des clauses d'initialisation.

Problèmes de compatibilité :
L'implémentation d'initialiseurs désignés en C aurait nécessité de rompre la compatibilité avec les implémentations C99 existantes. Cela aurait introduit des incohérences et des erreurs potentielles pour la migration du code.

Restrictions d'imbrication et de tableau :
C99 permet l'imbrication d'initialiseurs désignés et l'initialisation désignée de tableaux. Ces fonctionnalités se sont avérées difficiles à intégrer dans C sans compromettre la cohérence du langage.

Clash des normes C99 :
Les initialiseurs désignés dans C99 permettent également l'initialisation des membres sans spécifier tous les membres. Cela contraste avec l'exigence de C selon laquelle tous ou aucun des membres d'une structure doivent être initialisés à l'aide de désignateurs.

Support limité en C 20

En réponse à la demande de l'industrie, le comité C a depuis introduit une prise en charge limitée des initialiseurs désignés dans C 20. Cependant, cette implémentation impose des restrictions qui répondent aux préoccupations mentionnées ci-dessus. Les initialiseurs désignés doivent être utilisés dans un ordre de déclaration strict, l'imbrication et l'initialisation de tableau ne sont pas prises en charge, et tous ou aucun des membres d'une structure doivent être initialisés avec des désignateurs.

Alternatives

Malgré le manque d'initialiseurs désignés de style C99, C propose des méthodes alternatives pour initialiser la classe membres :

  • Initialisation du constructeur : Permet l'initialisation explicite des membres dans la définition de la classe.
  • Liste d'initialisation des membres : Permet l'initialisation des membres directement au sein du constructeur.
  • Initialisation de l'agrégat : Semblable à désigné initialisation, mais appliqué aux types d'agrégats (par exemple, les structures).

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