J'ai un morceau de code qui analyse un fichier texte obscur. ces chaînes au lieu de ces littéraux dans le code ci-dessus. P> Que voulez-vous faire? p> p>
Ce fichier texte peut contenir divers mots-clés. À un moment donné, il y a une partie longue qui se lit comme ceci: "hauteur" code> et
"largeur" code> sont seulement jamais utilisé dans ce même morceau de code. Néanmoins, je me demande s'il serait préférable d'utiliser des constantes de chaîne définies comme p>
6 Réponses :
J'utiliserais un const. * p>
même s'il est utilisé uniquement une fois. P>
Je n'utiliserais pas de #define. P>
* Sauf dans un ensemble de situations très étroitement défini dans lequel un petit compilateur génère des octets supplémentaires dans un environnement mémoire extrêmement contraint p>
pourquoi ferais-tu ça? Les chaînes littérales sont de toute façon constante, n'est-ce pas? Déclarer une variable pour quelque chose qui n'est jamais changé semble être un gaspillage de mémoire.
@Basti: En C / C ++, tout compilateur valant son sel générera le même code de toute façon. D'autres langues "manquent" d'un préprocesseur de toute façon. Et comme toujours, si vous vous souciez de la mémoire, utilisez beaucoup de mémoire, il existe des opportunités d'optimisation beaucoup plus importantes ailleurs - pas besoin de perdre du temps à penser à quelque chose de ce mineur.
Désolé, j'ai beaucoup travaillé sur les DSP ces derniers temps. Et les DSP ont des contraintes de mémoire assez étroites et souvent des compilateurs abyssaux (j'ai une fois utilisé une fois d'exécution C ++ sur un DSP qui manquait de Nouveau [] code> ...). Néanmoins, vous avez probablement raison de ne pas constituer un problème critique.
En ce qui concerne "pourquoi": vous pourriez penser dans le sens de "Ceci n'est utilisé que dans cet endroit et laissez-le donc comme un littéral est ok". Et si vous avez raison, et l'hypothèse que vous n'utiliserez jamais jamais ce même littéral ailleurs, il se révèle être vrai, alors cela n'a pas d'importance. TOUTEFOIS. En pratique, j'ai trouvé cela si très étroitement ne pas être vrai que j'ai trouvé une meilleure pratique pour simplement faire le const, car je finirai par utiliser la chose ailleurs, et même si je ne le fais pas, la plupart des compilateurs Don ' t fortement impact sur le code compilé, comme indiqué ailleurs.
commencer sans extraire des constantes. Ensuite plus tard, votre éditeur peut probablement le faire pour vous si vous en avez besoin pour une raison quelconque plus tard.
Bien que si vous pensez que cela améliorera la lisibilité de votre code, vous pouvez utiliser des constantes. Faites cela si vous pouvez ajouter plus de sens sémantique en le faisant: p>
+1 pour ajouter un sens. Un const comme string_one code> est juste un (quotidien) wtf.
C'est une bonne habitude d'utiliser des constantes avec des noms significatifs même s'ils sont utilisés une fois dans le code. Si vous les utilisez plus d'une fois, vous
Avoir les constantes au même endroit aide surtout si les constantes doivent être modifiées à l'avenir - c'est-à-dire en cas de localisation. P>
Si les constantes de chaîne sont spécifiques à une solution (c'est-à-dire d'analyser une sorte de fichier de configuration avec des mots-clés bien estaprés), alors je dirais que l'introduction d'un const ne fait rien - sauf pour Garder votre codage Style cohérent fort>. :) p>
ofc, si vous utilisez la même chaîne constante deux fois, la constante vous donne un grand avantage: Le compilateur vous avertira lorsque vous faites une faute de frappe en constante forte>, mais ce n'est pas si vous ne voulez pas faire une faute de frappe dans un littéral répété. P>
L'avantage d'utiliser des constantes pour les chaînes, même si elles ne sont utilisées qu'une seule ou deux fois, est que le compilateur peut vous vérifier correctement les noms d'identifiant, qu'il ne peut pas faire si vous utilisez des littéraux de chaîne - - Donc, une fois que vous avez les cordes réelles elles-mêmes, vous êtes plus susceptible de prendre certains types de fautes de frappe à la compilation. Ceci est généralement utile (pour des raisons évidentes) - bien que parfois, cela peut être un peu ennuyeux pour quiconque répond à votre code ensuite, il faut trouver régulièrement la définition de chaque constante pour voir la séquence de caractères qui se réfèrent réellement.
Un Recommandation que j'aurais pour C (et en effet C ++) consisterait à utiliser des matrices Static Const de caractères pour contenir les chaînes, par exemple: p> Cela facilite la perspective du débogueur et vous êtes assuré d'obtenir une copie de chaque chaîne. P> p>
Mais puisque les cordes ne sont jamais utilisées une fois, il n'ya aucun moyen que le compilateur puisse m'aider à vérifier l'orthographe ...
Oh, à droite ... c'est moi en train de lire trop littéralement, je pense :) Allez probablement avec le "Ne forcez pas le prochain gars à sauter autour du code", puis!
"Vous êtes garanti d'obtenir une copie de chaque chaîne" ... par unité de traduction.
Un avantage d'utilisation d'un symbole constant au lieu de la magie Number / String est que vous pouvez exprimer plus précisément la valeur de la valeur. Par exemple. Un jeton à cordes dans votre texte pourrait être "WDH". Il n'est pas évident que cela signifie "largeur" ou "la largeur du sens du jeton de la voiture" par exemple. En utilisant une constante, vous l'exprimez mieux: Ce n'est qu'une idée. P> p>
Une opinion perspicace sur le sujet: Programmerr47.medium.com/.../a>