Nommer Inclure les gardes
Comment le C++ inclure des gardes généralement nommé? J'ai tendance à voir ce beaucoup:
#ifndef FOO_H
#define FOO_H
//...
#endif
Cependant, je ne pense pas que c'est très intuitif. Sans voir le nom de fichier qu'il est difficile de dire quel FOO_H
est-il et quel est son nom fait référence à l'.
Ce qui est considéré comme une meilleure pratique?
source d'informationauteur Maxpm
Vous devez vous connecter pour publier un commentaire.
À partir de ma propre expérience, la convention est au nom de l'inclusion des gardes après le fichier d'en-tête contenant eux, à l'exception que le nom est tout en majuscules, et la période est remplacé par un trait de soulignement.
Donc
test.h
devientTEST_H
.La vie réelle des exemples de Qt Creator, qui suit la présente convention, lorsque l'auto-générer de la catégorie fichiers d'en-tête.
J'ai personnellement suivi du coup de pouce de la recommandation. C'est peut-être l'une des plus grande collection de bibliothèques C++ de bonne qualité et ils n'ont pas de problème.
Il va comme:
qui est:
_[A-Z]
ou contenant__
ne l'est pas)INCLUDED
vous êtes gâter pour un combat)J'ai lu sur GUID mais ces air bizarre.
Et, évidemment, je préfère que tous les compilateurs de mettre en œuvre
#pragma once
(ou mieux,#pragma multiple
et "une fois" être le comportement par défaut...)Prises directement à partir de google guide de style:
- Je utiliser ce style dans mes propres projets.
Regarder le code #inclure l'en-tête.
Si c'est quelque chose comme:
mylib/myheader.h
est déjà un nom unique. Juste capitaliser et de remplacer l'un et l'autre . _Si vous avez deux en-têtes sur votre chemin avec le même nom par rapport au chemin, vous avez déjà une collision à ce niveau.
Remplacer
FOO_H
avecFOO_H_INCLUDED
et c'est plus clair.Comme d'autres l'ont mentionné avant, un très commun de la convention est d'utiliser la version en majuscules du nom, et la dot remplacé par un trait de soulignement: foo.h -> FOO_H
Cependant, cela peut conduire à des collisions de noms simples et/ou des noms communs. Pour cette raison, générée automatiquement en-tête comme le stdafx.h en non-vide Visual C++ projets d'ajouter des chaines de caractères aléatoires, comme:
http://www.random.org/strings/ est utile générateur aléatoire pour cela.
Aussi, si le fichier est une partie de certains sous-module, ou de son contenu ou de séjourner dans un espace de noms spécifique, j'ai tendance à ajouter à la garde de trop:
J'ai l'habitude d'utiliser quelque chose comme
FOO_H_INCLUDED_
. Quelques-uns (Microsoft) des en-têtes avoir ce qui ressemble beaucoup à une représentation sous forme de chaîne d'un GUID, mais je n'ai jamais eu besoin de rien tout à fait complexe.Habituellement, les gens le faire par nom de fichier afin que chaque fichier de code sera compilé et ajouté qu'une seule fois. Vous pourriez faire FOO_H ce que vous voulez, mais presque tout ce que j'ai jamais codé ou vu a utilisé le nom du fichier. Assurez-vous qu'il est unique parce que vous ne voulez pas que votre FOO_H en conflit avec quelqu'un d'autre FOO_H.
J'ai l'habitude de regarder l'heure qu'il est et juste ajouter qu'à la fin, c'est à dire
FOO_H_248
c'est une précaution supplémentaire, et vous n'aurez jamais à vous en souvenir, de toute façon, de sorte que vous n'avez pas besoin de s'inquiéter du fait que c'est cryptique.