En C, le mot-clé const peut être utilisé pour empêcher toute modification d'un objet ou d'un pointeur. Surprenant pour certains développeurs, la syntaxe peut varier :
const Object* obj; // can't change data Object* const obj; // can't change pointer const Object* const obj; // can't change data or pointer Object const *obj; // same as const Object* obj;
La question se pose de savoir quelle syntaxe est venue en premier et pourquoi les deux sont correctes.
Origine historique du placement de const
La grammaire du langage pour C et C permet un analyseur de gauche à droite, ce qui signifie que le compilateur lit les entrées de gauche à droite. à droite et traite les jetons au fur et à mesure qu'il les rencontre.
Lors de l'analyse de la déclaration, lorsque le jeton est consommé, l'état de la déclaration passe à un type de pointeur. Si const rencontre le en premier, le qualificatif s'applique à la déclaration du pointeur ; s'il le rencontre avant le *, le qualificatif s'applique aux données référencées.
Comme le sens sémantique ne change pas en raison de la position de const, les deux placements sont acceptés.
Implications pour les pointeurs de fonction
Une situation similaire se produit avec la fonction pointeurs :
Une fois de plus, l'interprétation de l'analyseur de gauche à droite est évidente dans le syntaxe.
Utilisation préférée
En fin de compte, il n'y a pas de préférence claire pour une syntaxe par rapport à l'autre. Le choix doit être fait en fonction de la lisibilité et des préférences du développeur.
Cependant, si une cohérence avec la syntaxe des pointeurs et des pointeurs de fonction est souhaitée, l'utilisation de const à gauche du type référencé peut être plus appropriée :
const Object* obj; // no change to obj pointer or value Object const *obj; // no change to obj pointer or value
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!