C'est complètement subjectif et il n'y a pas de règles imposées autres que celles normalement associées au jeu de caractères pour nommer les macros pré-processeur. C'est classique pour les macros à définir en majuscules. Cela tend à les aider à se démarquer dans le code source. Une convention à laquelle j'ai tendance à adhérer est la version strictement capitalisée du nom de fichier, la période étant remplacée par un trait de soulignement et des caractères de soulignement avant et arrière. Ainsi, pour un fichier appelé DataTableNameMangler.hpp
include garde ressemblerait à ceci:
#ifndef _DATATABLENAMEMANGLER_HPP_
#define _DATATABLENAMEMANGLER_HPP_
...
#endif // _DATATABLENAMEMANGLER_HPP_
Il n'y a pas grande raison de ce que je recommande fortement la cohérence que le nom correspond au nom de fichier exactement. J'utilise normalement un petit script de création de classe pour générer mes classes initiales. Ce qui suit extrait Bash donne une idée:
#!/bin/bash
INC_GUARD_NAME="_${1^^*}_HPP_"
echo "#ifndef $INC_GUARD_NAME"
echo "#ifndef $INC_GUARD_NAME"
echo
echo "class $1 {};"
echo
echo "#endif // $INC_GUARD_NAME"
Ainsi:
$ ./makeclass.bash DataTableNameMangler
#ifndef _DATATABLENAMEMANGLER_HPP_
#ifndef _DATATABLENAMEMANGLER_HPP_
class DataTableNameMangler {};
#endif // _DATATABLENAMEMANGLER_HPP_
Ceci est naturellement juste un exemple très basique. Surtout, n'oubliez pas de mettre le commentaire avant le nom de garde sur la dernière ligne. #endif
ne prend aucun paramètre donc la macro sera transmise au compilateur C++ qui s'en plaindra s'il n'est pas commenté.
Merci beaucoup! Bien sûr! C'est évident pour moi maintenant, je ne sais pas pourquoi cela ne m'a pas frappé avant. C'est défini après l'ifndef donc .. Ha, merci! – foo