Maison > développement back-end > C++ > le corps du texte

Pourquoi l'initialisation par notation par points n'est-elle pas prise en charge pour les structures en C ?

Susan Sarandon
Libérer: 2024-11-01 05:43:27
original
102 Les gens l'ont consulté

Why is dot-notation initialization not supported for structs in C  ?

Initialisation de structures C : une approche alternative

En C, contrairement à C, il n'est pas possible d'initialiser des structures en utilisant la notation par points ci-dessous :

<code class="c++">struct address {
    int street_no;
    char *street_name;
    char *city;
    char *prov;
    char *postal_code;
};

// Invalid C++ syntax
address temp_address = { .city = "Hamilton", .prov = "Ontario" };</code>
Copier après la connexion

Cette requête soulève plusieurs questions :

  • Pourquoi cette méthode d'initialisation n'est-elle pas supportée en C ?
  • Est-ce dû à des raisons techniques ou pratiques ?
  • Existe-t-il d'autres moyens d'améliorer la lisibilité lors de l'initialisation de la structure ?

Raisons techniques et pratiques

Techniquement, il n'y a aucune limitation sous-jacente empêchant l'exécution implémentation de l'initialisation par notation par points pour les structures en C . Cependant, le Comité des normes C a choisi de ne pas inclure cette fonctionnalité pour plusieurs raisons pratiques :

  • Cohérence : C vise la cohérence entre les différentes fonctionnalités du langage. Étant donné que l'initialisation par notation par points n'est pas disponible pour d'autres types (par exemple, les tableaux), son application aux structures pourrait prêter à confusion.
  • Sécurité des types : L'initialisation par notation par points contourne potentiellement la vérification de type. introduire des erreurs si les noms ou types de membres sont incorrects.
  • Maintenance : La prise en charge de cette méthode ajouterait de la complexité au compilateur et rendrait plus difficile la maintenance et l'évolution du langage.

Approches alternatives pour la lisibilité

Pour améliorer la lisibilité, envisagez les alternatives suivantes :

  • Initialisation multiligne : Divisez l'initialisation sur plusieurs lignes, avec des commentaires pour chaque membre :
<code class="c++">address temp_address = {
  0,  // street_no
  nullptr,  // street_name
  "Hamilton",  // city
  "Ontario",  // prov
  nullptr,  // postal_code
};</code>
Copier après la connexion
  • Listes d'initialisation : Utilisez un constructeur avec une liste d'initialisation pour initialiser les membres :
<code class="c++">struct address {
  address(int sn, char* stn, char* c, char* p, char* pc):
    street_no(sn), street_name(stn), city(c), prov(p), postal_code(pc) {}

  int street_no;
  char *street_name;
  char *city;
  char *prov;
  char *postal_code;
};

address temp_address(0, nullptr, "Hamilton", "Ontario", nullptr);</code>
Copier après la connexion

Ces alternatives fournissent une initialisation explicite et lisible tout en adhérant aux principes de sécurité et de cohérence des types de C.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!