Un espace si dense
C++ standard

Conventions de codage en C++

mardi 19 décembre 2006 par guillaume

Avoir un code normalisé est nécessaire pour sa compréhension et sa réutilisation. Un code mal écrit est un code irrécupérable (et qui sera probablement réécrit lorsque plus personne ne comprendra son fonctionnement).

Je donne ici des conventions que j’estime simples, claires et pas trop contraignantes

Style général

L’indentation automatique de vim est très intéressante


if(machin)
{
      bidule;
}else
{
      truc;
}

//Eventuellement
if(machin)
{
      bidule;
}else{
      truc;
}

L’utilisation d’"assert" est vivement conseillée.

Le style des commentaires

On utilise le système de documentation automatique Doxygen, avec, si possible, SVN comme gestionnaire de version pour pouvoir automatiquement intégrer dans le fichier la date de modification et l’auteur. Cela nous donne les règles suivantes.

  • Présentation du fichier de type Doxygen
  • Commentaires sur chaque classe, fonction, membre de classe public ou privé de type Doxygen.
  • Commentaires simples de type // (pour pouvoir bloquer les lignes de code avec /* */)
  • Les commentaires doivent apparaitre lorsque l’explication du code est nécessaire, ne pas mettre de chose de type "// Je déclare la classe" sauf si c’est vraiment incompréhensible.
  • Avec un case sans break, mettre un commentaire de type //fallthrough pour éviter de croire à une erreur lors de la relecture.

Ecriture des variables

  • Classe : MaClasse
  • Fonction membre : ma_fonction
  • Membre : _mon_membre
  • Pointeurs, entiers (etc) : éventuellement, mettre un p sur les pointeurs. Mais sans aller jusqu’à la notation Hongroise (incompréhensible)
  • Macro : MA_MACRO

On peut voir une règle générale : lorsque le nom à une majuscule et des minuscule, il n’y a pas de séparation par _. Sinon, il y a séparation par _ (donc s’il n’y a que des majuscules ou que des minuscules)

Un autre point : pour une variable à faible portée, mettre un nom court. Exemple :


//i suffit largement, mais si on va dans le complexe, il faut modifier
for(int i=0;i<valeur.size();i++)
{
  mon_total+=valeur[i];
}

Technique générale

  • Utilisation des assert :

    include <assert.h>
    ...
    assert(age>=0);///Si l'age est négatif : problème
    ...
  • Utilisation de macro plutot que de littéraux

    if(valeur==42)//pas bien
    {
    ...
    }

    ...

    #define TEST_VALEUR 42

    if(valeur==TEST_VALEUR)//bien
    {
    }

Si j’arrive à suivre tout ça... Tant mieux pour moi

Accueil du site | Contact | Plan du site | Espace privé | visites : 50608

RSS RSSfr

Site réalisé avec SPIP 1.8.3 + ALTERNATIVES