web-dev-qa-db-fra.com

Quelle est la longueur maximale pour un identifiant C / C ++ sur des systèmes communs (Build)?

Je ne me souviens pas de la norme en disant quelque chose de la longueur maximale pour les identificateurs, donc en théorie, ils peuvent être long. Dans la vie réelle, ces noms pourraient être limités par au moins les implémentations du compilateur et de la liaison.

Bien que cela fonctionne sur tous les systèmes

int a;

cet extrait

#!/usr/bin/Perl
print "int" . "b" x 2**16 . ";";

crée une déclaration qui donne une référence non définie à std::Somethings avec ld lors de la compilation/de la liaison (à l'aide de GCC/MINGW).

Alors, quelles sont les limites de taille d'un identifiant sur différents systèmes?

31
mbx
43
Anders Lindahl

L'annexe B de la norme C++ affirme qu'une implémentation doit prendre en charge les identificateurs d'au moins 1024 caractères de long, mais cela n'est pas obligatoire.

15
Neil Butterworth

Basé sur MISRA C 2004:

Règle 5.1 (Obligatoire): Les identificateurs (internes et externes) ne doivent pas s'appuyer sur la signification de plus de 31 caractères. [Indéfini 7; Mise en œuvre 5, 6] La norme ISO nécessite des identifiants internes à distincts dans les 31 premiers caractères afin de garantir la transférabilité de code. Cette limitation ne doit pas être dépassée, même si le compilateur le soutient. Cette règle s'applique à tous les espaces de noms. Les noms de macro sont également inclus et la limite de 31 caractères s'applique avant et après la substitution. La norme ISO nécessite des identifiants externes à distinct dans les 6 premiers caractères, quel que soit leur cas, afin de garantir une portabilité optimale. Cependant, cette limitation est particulièrement grave et est considérée comme inutile. L'intention de cette règle est de sanctionner une relaxation de l'obligation de l'ISO à un degré à la mesure des environnements modernes et il est confirmé que 31 caractère/signification de cas soient étayés par la mise en œuvre. Notez qu'il existe un problème connexe avec l'utilisation de noms d'identifiant qui ne diffèrent que par un ou quelques caractères, en particulier si les noms d'identifiant sont longs. Le problème est accentué si les différences sont dans des caractères faciles à lire comme 1 (un) et L (minuscule L), 0 et O, 2 et Z, 5 et S, ou N et H. Il est recommandé de garantir que les noms d'identifiant sont toujours facilement distinguables visuellement. Des lignes directrices spécifiques sur cette question pourraient être placées dans les directives de style (voir la section 4.2.2).

J'utilise cette règle. Peut-être que quelqu'un me demande "Voyez-vous un compilateur qui ne peut pas reconnaître l'identifiant plus de 31?" Oui, je me souviens de IAR RL78 V2.21.1 I Définir 2 identifiant sans aucun avertissement et erreur que j'ai rencontré problème dans l'accès (maintenant je ne me souviens pas de quel est le scénario exact)

0
SpongeBob