# Standard de codage

## Définition (Wikipédia)

Les règles de codage sont un ensemble de règles à suivre pour uniformiser les pratiques de développement logiciel, diffuser les bonnes pratiques de développement et éviter les erreurs de développement “classiques” au sein d’un groupe de développeurs. Les règles de codage s’articulent autour de plusieurs thèmes, les plus courants étant :

1. Le nommage et l’organisation des fichiers du code source
2. Le style d’indentation
3. Les conventions de nommage, ou règles de nommage
4. Les commentaires et documentation du code source
5. Recommandations sur la déclaration des variables
6. Recommandations sur l’écriture des instructions, des structures de contrôle et l’usage des parenthèses dans les expressions.

## Ressources documentaires

[Wikipedia](https://fr.wikipedia.org/wiki/R%C3%A8gles_de_codage)

[GNU Coding standard](https://www.gnu.org/prep/standards/html_node/index.html)

[clang\_format](https://clang.llvm.org/docs/ClangFormatStyleOptions.html)

[clang](https://fr.wikipedia.org/wiki/Clang)

[LLVM](https://fr.wikipedia.org/wiki/LLVM)

## Indentation du code

En [informatique](https://fr.wikipedia.org/wiki/Informatique) : [l’indentation](https://fr.wikipedia.org/wiki/Style_d%27indentation) consiste en l’ajout de tabulations ou d’espaces dans un fichier, pour une meilleure lecture et compréhension du code

### Indenter automatiquement votre code

- Vous pouvez indenter automatiquement sous Qt le code source par les raccourcis suivants

**CTRL+A** sélectionne le texte  
**CTRL+I** formate automatiquement la sélection dans QT

### Lignes orphelines

Les lignes sans codes, ou lignes orphelines doivent être supprimées, sauf si elles servent à délimiter les blocs d’instructions (comme par exemple entre la déclaration des variables et le début des instructions)

## Conventions de nommage à respecter

### Déclaration des variables

- Les variables doivent avoir des noms représentatifs de leur contenu

\*\*Exemple ( je veux déclarer un entier contenant des notes) \*\*

```
int notes; 

```

<div class="language-c highlighter-rouge" id="bkmrk-"><div class="highlight">  
</div><button aria-label="Copy code to clipboard" type="button"><svg class="copy-icon" viewbox="0 0 24 24"></svg></button></div>- Pour les tableaux, je fais précéder le nom du tableau de `tab`

\*\*Exemple (Je veux déclarer un tableau contenant des notes ( comme 14,34 ou 5,75) \*\*

```
float tabNote[10];

```

<div class="language-c highlighter-rouge" id="bkmrk--1"><div class="highlight">  
</div><button aria-label="Copy code to clipboard" type="button"><svg class="copy-icon" viewbox="0 0 24 24"></svg></button></div>- Pour les pointeurs, je fais précéder le nom du pointeur de `ptr`

```
int *ptrNote = nullptr;

```

<div class="language-c highlighter-rouge" id="bkmrk--2"><div class="highlight">  
</div><button aria-label="Copy code to clipboard" type="button"><svg class="copy-icon" viewbox="0 0 24 24"></svg></button></div>## Convention de nommage

Je respecte la notation [lowerCamelCase](https://fr.wikipedia.org/wiki/Camel_case) pour mes variables et fonctions

- Premier mot en minuscule
- Les mots suivants avec une majuscule

### Variables et fonctions

\*\*Exemple (Je veux déclarer un entier contenant un nombre de livres) \*\*

```
int nombreLivre;

```

<div class="language-c highlighter-rouge" id="bkmrk--3"><div class="highlight">  
</div><button aria-label="Copy code to clipboard" type="button"><svg class="copy-icon" viewbox="0 0 24 24"></svg></button></div>\*\*Exemple (Je veux déclarer une fonction pour sauver une image en niveau de gris) \*\*

```
void sauverImageNiveauGris();

```

<div class="language-c highlighter-rouge" id="bkmrk--4"><div class="highlight">  
</div><button aria-label="Copy code to clipboard" type="button"><svg class="copy-icon" viewbox="0 0 24 24"></svg></button></div>### Les macro

- Les noms des macro doivent être en majuscules

\*\*Exemple, une macro qui calcule le max de deux nombres \*\*

```
#define MAX(x,y) ((x)>(y)?(x):(y))

```

<div class="language-c highlighter-rouge" id="bkmrk--5"><div class="highlight">  
</div><button aria-label="Copy code to clipboard" type="button"><svg class="copy-icon" viewbox="0 0 24 24"></svg></button></div>### Les structures

- Le type de la structure doit commencer par une majuscule

\*\*Exemple, j’ai une structure `Pixel` \*\*

```
typedef struct { 
        unsigned char red; 
        unsigned char blue; 
        unsigned char green; 
      }  Pixel;

```

<div class="language-c highlighter-rouge" id="bkmrk--6"><div class="highlight">  
</div><button aria-label="Copy code to clipboard" type="button"><svg class="copy-icon" viewbox="0 0 24 24"></svg></button></div>- Je déclarerai une variable du type Pixel comme indiqué ci-dessous

```
Pixel monPixel; 

```

<div class="language-c highlighter-rouge" id="bkmrk--7"><div class="highlight">  
</div><button aria-label="Copy code to clipboard" type="button"><svg class="copy-icon" viewbox="0 0 24 24"></svg></button></div>### Les classes

#### NOM DES CLASSES

- Chaque classe commencera par ‘C’ suivi du nom de la classe avec la première lettre en majuscule

\*\*Exemple, une classe contenant des informations sur des avions sera déclarée ainsi \*\*

```
class CAvion  {
  public :
    //Méthodes publiques
  private :
    //Méthodes et attributs privés
};

```

<div class="language-c highlighter-rouge" id="bkmrk--8"><div class="highlight">  
</div><button aria-label="Copy code to clipboard" type="button"><svg class="copy-icon" viewbox="0 0 24 24"></svg></button></div>#### MÉTHODES DE LA CLASSE

- Les méthodes de la classe respectent la convention lowerCamelCase

#### ATTRIBUTS DE LA CLASSE

- Pour les attributs, je fais précéder le nom de l’attribut de “\_”

\*\*Exemple (un attribut contenant un prénom) \*\*

```
string _prenom; 

```

<div class="language-c highlighter-rouge" id="bkmrk--9"><div class="highlight">  
</div><button aria-label="Copy code to clipboard" type="button"><svg class="copy-icon" viewbox="0 0 24 24"></svg></button></div>#### CLASSE CAVION AVEC MÉTHODES ET ATTRIBUTS

```
class CAvion  {
  public :
    int controlerAssiette(); 
  private:
    float _altitude; 
};
```