On m'a appris depuis le lycée que définir des variables comme celle-ci:
int _a;
ou
int __a;
devrait être considéré comme une mauvaise pratique car cela finirait par énigmer les compilateurs qui utilisent des variables commençant par un trait de soulignement pour nommer les variables temporaires.
Pour autant que je sache, c'est la raison pour laquelle certaines personnes aiment déplacer le trait de soulignement à la fin du nom, comme:
int a_;
Cependant, je vois beaucoup de code tout autour qui utilise des variables de début de soulignement. Et ce code se construit assez bien avec Visual Studio 2010 et g ++ 4.x.
Je me demande donc: est-ce que ce n'est pas un problème de nos jours? Les compilateurs modernes sont-ils plus intelligents dans les conventions de dénomination?
Réponses:
Vous comprenez apparemment mal la raison pour laquelle les préfixes soulignés sont de mauvaises pratiques. Pour faire court, c'est parce que les standards C et C ++ réservent ces préfixes pour les détails d'implémentation, par exemple pour l'implémentation de bibliothèque standard. (notez que _ et __ ne sont pas réservés aux mêmes choses, voir commentaires)
Même si les noms sont sous la portée (espace de noms, classe, etc.), il peut y avoir des noms globaux, en particulier des macros, qui utilisent ces préfixes et peuvent briser silencieusement votre code si vous les utilisez aussi.
Donc, fondamentalement, la plupart du temps, il est sûr d'utiliser ces préfixes MAIS si vous ne les utilisez pas, vous avez une garantie à 100% que votre nom ne sera jamais en conflit avec les noms d'implémentation.
C'est pourquoi, dans le doute, n'utilisez pas ces préfixes.
la source
_limit
n'est pas une erreur, mais c'est une fonction globale. Je pense qu'il vaut mieux avoir une politique simple qui dit "n'utilisez pas de soulignements principaux, sans exception" qu'une politique qui les autorise dans certains contextes et pas dans d'autres. Mais nous pouvons convenir de différer sur ce point. Et pour être clair, je n'ai aucun problème avec les soulignés ailleurs qu'au tout début.L'utilisation de deux traits de soulignement est définitivement mauvaise - réservée aux détails d'implémentation spécifiques au compilateur. Cela ne s'applique pas à l'utilisation d'un trait de soulignement.
Certaines personnes détestent les soulignés. Que vous appeliez quelque chose
m_index
ouhighest_price
ou_a
- ils le détestent. Il y a 25 ans, j'ai travaillé avec quelqu'un qui m'a parlé d'une imprimante IBM spécifique (très populaire) qui pouvait contenir plus de lignes sur la page en omettant le pixel inférieur sur toutes les autres lignes. C'était bien pour les mémos, ou pour la sortie de grandes quantités de nombres et autres, mais cela avait pour effet de rendre le code de la moitié de vos soulignements invisibles. (Oui, vraiment!) Les gens de cette génération ont généralement la haine irrationnelle du trait de soulignement, que ce soit à cause de l'interaction avec cette imprimante ou du fait de travailler avec quelqu'un qui les a frappés et qui ne doivent pas utiliser de traits de soulignement.La plupart des gens en utilisant le cas mixte (une option que nous n'avions pas, disons, Fortran) une approche plus lisible:
mIndex
,HighestPrice
,a
se lever assez bien les exemples précédents soulignés. Je vais vous donner deux règles:_limit
pour les paramètres de fonction,m_limit
pour les variables de membre, n'utilisez jamais de soulignements, cas de chameau, mettez en majuscule chaque mot, hongrois, quelque chose ) et respectez-le. Ne vous trompez pas parfois avec des traits de soulignement au début, parfois à la fin, parfois sans les utiliser, et cinq conventions de casse différentes. Être cohérent.L'imprimante en question a disparu depuis longtemps. Si vous souhaitez utiliser un trait de soulignement à la fois, n'hésitez pas à le faire. Mais comprenez, les haineux soulignés existent toujours.
la source