-
Notifications
You must be signed in to change notification settings - Fork 1
Conventions de programmation internes au projet (nommage, syntaxe, bonnes pratiques)
Guillaume Truchot edited this page May 10, 2016
·
27 revisions
- Les fichiers de classes doivent être nommés "NomDeLaClasse.h" et "NomDeLaClasse.cpp"
- Le fichier contenant la fonction
main()
se nomme "main.cpp" - De manière générale, les noms des fichiers et des dossiers respectent la PascalCase
Elément | Préfixe | Casse |
---|---|---|
Interfaces | I | PascalCase |
Classes abstraites | A | PascalCase |
Classes | PascalCase | |
Constantes | UPPER_CASE | |
Variables membres | m_ (C.F. "Note") | camelCase |
Variables locales/paramètres de fonctions | C.F. "Note" | camelCase |
Fonctions | camelCase | |
Espaces de noms | lowercase |
Note : Les variables ne doivent pas être préfixées d'une lettre indiquant le type de la variable.
- Dans les classes, la section
public:
précède la sectionprotected:
qui précède elle-même la sectionprivate:
. Une seule section de chaque par classe. - Les accolades doivent être seules sur une ligne
- Constructeurs : l'appel au constructeur de la classe mère est sur la même ligne, l'initialisation des variables sur la ligne suivante
- L'étoile servant à déclarer un pointeur porte sur le type et non sur le nom -- même chose pour le "&" des références
- Pas de parenthèses pour les
return
- Pas de commentaires dans les fonctions, uniquement avant la fonction suivant ce schéma :
/*
** Mon commentaire
** sur plusieurs lignes
*/
- Le caractère utilisé pour l'indentation est la tabulation
- Les identificateurs (noms de fonctions, noms de variables, ...) sont alignés sur le plus long type du bloc actuel
- Les modificateurs après les déclarations de fonctions (
const
,= 0
) sont alignés
class Indentation
{
public:
// Les noms de variables sont alignés
static const std::string myString;
static const int myInt;
// Les "default" sont alignés
Indentation() = default;
~Indentation() = default;
// Les noms de fonctions sont alignés ensemble et les "const" sont alignés ensemble
int returningSomeInt() const;
std::map<int, std::vector<std::string> > returningSomeBigMap() const;
// Les noms de fonctions sont alignés ensemble PAR RAPPORT à ce bloc (pas alignés avec les noms de fonctions ci-dessus)
void setSomeInt(int someInt);
void resetSomeBigMap();
private:
// Les noms de variables sont alignés
int m_someInt;
std::map<int, std::vector<std::string> > m_someBigMap;
};
- N'écrire que du code strictement nécessaire (exemple : on n'implémente pas de getters/setters pour tous les attributs d'une classe si on ne s'en sert pas)
- Ne pas utiliser des fonctions du langage C (à part si elles n'ont pas d'équivalent en C++)
-
Pas de casts C-style (utiliser les casts C++ :
static_cast
,dynamic_cast
,reinterpret_cast
etconst_cast
) - Pas d'implémentation dans les en-têtes (sauf templates ?)
-
Pas de
void
entre les parenthèses d'une fonction ne prenant aucun argument. Ça ne sert à rien en C++. - Utiliser des
const
pour les fonctions membres quand nécessaire - N'utiliser l'allocation dynamique que lorsque c'est nécessaire
- Préférer les références aux pointeurs lorsque c'est possible
- Utiliser des constantes à la place des
#define
- Utiliser
nullptr
à la place deNULL
- Mettre les noms des paramètres de fonctions dans les en-têtes
- Ne pas préfixer les noms des variables membres de
this->
-
Préfixer les appels aux fonctions membres de
this->
(à l'inverse des variables membres, celles-ci n'ayant pas de préfixe m_, cela aide à savoir qu'il s'agit d'une fonction membre)
- Inclure seulement les en-têtes nécessaires au fichier
- Utiliser les double quotes pour les en-têtes perso seulement, sinon utiliser les chevrons
-
Ne pas remonter ou descendre l'arborescence, utiliser les options du compilateur pour ajouter des répertoires d'inclusion (pas de
#include "../../fichier.h"
ou#include "dossier/fichier.h"
) -
Ordre des
#include
:- En-têtes standards C++ venant du C (exemple :
#include <cstdlib>
, version C :#include <stdlib.h>
) - En-têtes standards C++ (exemple :
#include <string>
) - En-têtes système (exemple :
#include <Windows.h>
,#include <unistd.h>
) - En-têtes des bibliothèques externes (exemple :
#include <irrlicht.h>
) - En-têtes perso (exemple :
#include "Weapon.h"
)
- En-têtes standards C++ venant du C (exemple :