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 :
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!