Projet

Général

Profil

Wiki » Historique » Version 197

Patrice Nadeau, 2026-01-18 20:17

1 1 Patrice Nadeau
# Règles de codage C
2
3 175 Patrice Nadeau
Le langage C utilisé avec le compilateur GCC :
4 178 Patrice Nadeau
* Standard [C99](https://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf) (`-std=c99`)
5 177 Patrice Nadeau
* Extensions GNU
6 179 Patrice Nadeau
    * **__attribute__((deprecated))** (`-Wdeprecated-declaration`)
7
    * **__attribute__((noreturn))**
8 181 Patrice Nadeau
    * **#pragma GCC message ""**
9
    * **#pragma GCC warning ""**
10
    * **#pragma GCC error ""**
11 194 Patrice Nadeau
12
TODO : `static` & `const`
13 1 Patrice Nadeau
    
14
---
15 184 Patrice Nadeau
16 193 Patrice Nadeau
{{>TOC}}
17
18
---
19
20 195 Patrice Nadeau
## Style 
21
1. DOIT être de style [Allman](https://fr.wikipedia.org/wiki/Style_d%27indentation#Style_Allman)
22
1. L’indentation DOIT être de **4** espaces
23
1. Une ligne ne DOIT PAS avoir plus de 80 caractères
24
    > La barre oblique inversée DOIT être utilisée dans les longues chaine de caractères (string)
25
1. Une instruction par ligne
26
1. Une espace avant et après un opérateur DOIT être utilisée sauf pour les opérateurs [unaires](https://fr.wikipedia.org/wiki/Op%C3%A9ration_unaire)
27
1. L’opérateur ternaire `?:` ne DOIT PAS être utilisé
28
1. La constante DOIT être placée à la gauche de l’opérateur d’équivalence (`==`)
29
    > Prévient les erreurs lors d'ajout dans les blocs d'une seule instruction
30
31 182 Patrice Nadeau
## Identifiants
32
1. Ne DOIT PAS contenir plus de **31** caractères 
33
    > ANSI standards
34
    * a @ z
35
    * A @ Z
36
    * 0 @ 9
37
    * Trait de soulignement (__)
38 186 Patrice Nadeau
1. En **anglais américain** :
39 185 Patrice Nadeau
    * Lettres
40
        * Macros :
41
            * Majuscules et minuscules
42
                > La parie principale DOIT être en majuscule
43
        * Fonctions, variables, énumérations, structures, définition de type : 
44
            * Minuscules
45
    * Nombre
46
    * Commence par une lettre
47
    * Si plusieurs mots sont utilisés, ils DOIVENT être séparées par des traits de soulignement
48 187 Patrice Nadeau
49
1. Déclaration
50
    1. Un objet ayant une visibilité locale DOIT avoir le modificateur `static` 
51
    1. Un objet « obsolète », DOIT avoir :
52
        1. Un des attributs :
53
            > Génération de message lors de la compilation (`-Wall`)
54
            * `deprecated` 
55
            * `unavailable`
56
        1. Les commentaires Doxygen : 
57
            * `@deprecated` : Indications sur le remplacement à utiliser
58
            * `@since` : Depuis quel version le changement est apparue
59
60 184 Patrice Nadeau
## Fichiers
61
Structure des répertoires et fichiers
62
63
> Format selon la commande `tree --charset ascii`
64
65
```
66
.
67
|-- AUTHORS : Fichier contenant les noms et courriels des auteurs
68
|-- bin : Répertoire contenant le fichier exécutable et les librairies compilées
69
|-- ChangeLog : Fichier des changements
70
|-- config.h : Fichier optionel contenant les macros communes au programme dans son ensemble (-imacros)
71
|-- COPYING : Fichier de licence (standard GNU)
72
|-- docs : Répertoire de la documentation (.pdf)
73
|-- include : Répertoire des fichiers d’en-tête (.h)
74
|-- INSTALL
75
|-- lib : Répertoire des libraires externes (liens symboliques)
76
|-- Makefile.in : Fichier d'informations spécifiques du projet pour le Makefile
77
|-- NEWS :
78
|-- obj : Répertoire contenant les objets (.o)
79
|-- README : Fichier d'informations du projet, en format markdown
80
`-- src : Répertoire des fichiers sources (.c)
81
```
82
83
## Fichiers sources
84
1. Nom du fichier :
85
    * Un préfixe en anglais de **8** caractères maximum pouvant contenir :
86
        * Lettres minuscule
87
        * Chiffres
88
        * Trait de soulignement
89
    * DOIT contenir un des suffixe suivants : 
90
        * `.h` : entête
91
        * `.c` : sources
92
1. Contenus
93
    * Section Doxygen :
94
        1. `@file` : Le nom du fichier
95
        1. `@brief`: Une brève description
96
        1. `@version`: Le numéro de version
97
        1. `@date`: La date de dernière modification
98
        1. `@author`: Une liste des participant(e)s et leur courriel
99
        1. `@copyright`: La liste des années et participant(e)s
100
    * Les fichiers d’entête contiennent en plus
101
        1. Une définition macro pour éviter de ré-inclure le fichier (<https://fr.wikipedia.org/wiki/Include_guard>).
102
103 162 Patrice Nadeau
[[Style]]
104 1 Patrice Nadeau
105 183 Patrice Nadeau
## Commentaires
106 182 Patrice Nadeau
1. Précède l’élément à documenté, avec la même indentation
107
1. En minuscules et commence par une majuscule
108
1. Phrase complète en français
109
1. Sur une ou plusieurs lignes
110 191 Patrice Nadeau
1. De style C (/*... */)
111
1. Doxygen DOIT aussi être utilisé
112
    1. Les « décorations » (gras, italique, etc.) sont faites avec la syntaxe Markdown
113 82 Patrice Nadeau
114 192 Patrice Nadeau
## Macros et préprocesseur
115
Directives du préprocesseur gcc.
116
117
1. Les macros ne devant plus être utilisées, DOIVENT générer un message lors de la compilation avec *#pragma GCC poison*
118
119
    > Dans ce cas, la documentation doit indiquer le substitut à utiliser
120
    > Pour la définition d’une valeur entière signée (int), un `enum` DOIT être utilisé.
121
1. Définition conditionnel : Utiliser une forme évitant les répétitions.
122
1. Macros *#warning* et *#error* : Utilisées pour afficher des avertissements ou des erreurs lors de la compilation.
123
124
    > N’est pas documenté dans Doxygen.
125
126
1. Un *#define* est utilisé pour remplacer une valeur au moment de la compilation
127
128
    > Pour la définition d'une valeur « integer », un *enum* DOIT être utilisé.
129 162 Patrice Nadeau
130 197 Patrice Nadeau
## Énumérations
131
DOIT être utilisée pour définir une série de valeurs.
132
133
* Permet l’utilisation dans une boucle avec des valeurs prédéfinis
134 162 Patrice Nadeau
135 196 Patrice Nadeau
## Typedef
136
1. En minuscule
137
1. Suivie de **_t**
138 162 Patrice Nadeau
139
[[Variables]]
140
141
[[Structures]]
142
143
[[Fonctions]]
144 1 Patrice Nadeau
145 159 Patrice Nadeau
[[Atmel AVR]]