Projet

Général

Profil

Wiki » Historique » Version 224

Patrice Nadeau, 2026-06-24 21:07

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 222 Patrice Nadeau
* DOIT être de style [Allman](https://fr.wikipedia.org/wiki/Style_d%27indentation#Style_Allman)
22 224 Patrice Nadeau
    > Respecte un alignement strict des accolades ouvrantes et fermantes
23 222 Patrice Nadeau
* L’indentation DOIT être de **4** espaces
24
* Une ligne ne DOIT PAS avoir plus de 80 caractères
25 195 Patrice Nadeau
    > La barre oblique inversée DOIT être utilisée dans les longues chaine de caractères (string)
26 222 Patrice Nadeau
* Une ligne DOIT contenir qu'une instruction
27
* 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)
28
* L’opérateur ternaire `?:` ne DOIT PAS être utilisé
29
* La constante DOIT être placée à la gauche de l’opérateur d’équivalence (`==`)
30 195 Patrice Nadeau
    > Prévient les erreurs lors d'ajout dans les blocs d'une seule instruction
31
32 182 Patrice Nadeau
## Identifiants
33 221 Patrice Nadeau
* Ne DOIT PAS contenir plus de **31** caractères (a..z, 1..9, _)
34
* DOIT être en **anglais américain**
35
* DOIT commencer par une lettre
36
* Les mots DOIVENT être séparées par des traits de soulignement
37
* Déclaration
38
    * Un objet ayant une visibilité locale DOIT avoir le modificateur `static` 
39
    * Un objet « obsolète », DOIT avoir l'un des attributs :
40 205 Patrice Nadeau
        > Génération de message lors de la compilation (`-Wall`)
41
        * `deprecated` 
42
        * `unavailable`
43 184 Patrice Nadeau
44 183 Patrice Nadeau
## Commentaires
45 221 Patrice Nadeau
* Précède l’élément à documenté, avec la même indentation
46
* En minuscules et commence par une majuscule
47
* Phrase complète en français
48
* Sur une ou plusieurs lignes
49
* De style C (/*... */)
50
* Doxygen DOIT aussi être utilisé
51
    * Les « décorations » (gras, italique, etc.) sont faites avec la syntaxe Markdown
52 82 Patrice Nadeau
53 192 Patrice Nadeau
## Macros et préprocesseur
54
Directives du préprocesseur gcc.
55
56 215 Patrice Nadeau
1. DOIVENT comporter que les caractères suivants : A..Z, 0..9, _
57 192 Patrice Nadeau
1. Les macros ne devant plus être utilisées, DOIVENT générer un message lors de la compilation avec `#pragma GCC poison`
58
    > Dans ce cas, la documentation doit indiquer le substitut à utiliser
59
    > Pour la définition d’une valeur entière signée (int), un `enum` DOIT être utilisé.
60
1. Définition conditionnel : Utiliser une forme évitant les répétitions.
61 223 Patrice Nadeau
1. Macros utilisées pour afficher des avertissements ou des erreurs lors de la compilation.
62
    * Note : `#pragma message`
63
    * Warning : `#pragma GCC warning`
64
    * Error : `#pragma GCC error` 
65 210 Patrice Nadeau
    > N’est pas documenté dans Doxygen.
66
1. Un `#define` est utilisé pour remplacer une valeur au moment de la compilation
67 1 Patrice Nadeau
68
## Énumérations
69
DOIT être utilisée pour définir une série de valeurs.
70
71
* Permet l’utilisation dans une boucle avec des valeurs prédéfinis
72
73
## Typedef
74
1. En minuscule
75
1. Suivie des caractères **_t**
76
77
## Structures
78
```c
79
/**
80 216 Patrice Nadeau
* \brief Structure d'un menu local
81 218 Patrice Nadeau
* \sa menu_select()
82 1 Patrice Nadeau
*/
83
struct menu {
84 216 Patrice Nadeau
/** \brief Caractère utilisé pour l'item */
85 1 Patrice Nadeau
char choice;
86 216 Patrice Nadeau
/** \brief Description de l'item */
87 1 Patrice Nadeau
char *item;
88
};
89
```
90
91
## Fonctions
92
Les fonctions définies dans une librairie de bas niveau pour du matériel (« driver ») DEVRAIENT utiliser les noms définis dans la fiche technique.
93
94
1. Le nom DOIT être dans le format suivant : _module_**_**_action_**_**_attribut_
95
    1. *module* signifie
96
        * Le nom d'un objet ou de la librairie
97
    1. *action* signifie :
98
        * set, get, clear : Règle, obtient ou vide un registre
99
        * read, write : Lis ou écris dans un fichier
100
        * init : Fonction d’initialisation
101
        * is : Vérifie un état
102
        * setup : Fonction de configuration des ports (p. ex. : AVR)
103
    1. *attribut* signifie 
104
        > TODO
105
1. Le modificateur `static` DOIT être utilisé dans la déclaration d’une fonction avec une vue locale
106
1. DOIT contenir qu’un seul `return`
107 207 Patrice Nadeau
108
## Fichiers
109
Structure des répertoires et fichiers
110
111
> Format selon la commande `tree --charset ascii`
112
113
```
114
.
115
|-- AUTHORS : Fichier contenant les noms et courriels des auteurs
116
|-- bin : Répertoire contenant le fichier exécutable et les librairies compilées
117
|-- ChangeLog : Fichier des changements
118
|-- config.h : Fichier optionel contenant les macros communes au programme dans son ensemble (-imacros)
119
|-- COPYING : Fichier de licence (standard GNU)
120
|-- docs : Répertoire de la documentation (.pdf)
121
|-- include : Répertoire des fichiers d’en-tête (.h)
122
|-- INSTALL
123
|-- lib : Répertoire des libraires externes (liens symboliques)
124
|-- Makefile.in : Fichier d'informations spécifiques du projet pour le Makefile
125
|-- NEWS :
126
|-- obj : Répertoire contenant les objets (.o)
127
|-- README : Fichier d'informations du projet, en format markdown
128
`-- src : Répertoire des fichiers sources (.c)
129
```
130
131
1. Nom du fichier :
132
    * Un préfixe en anglais de **8** caractères maximum pouvant contenir :
133
        * Lettres minuscule
134
        * Chiffres
135
        * Trait de soulignement
136
    * DOIT contenir un des suffixe suivants : 
137
        * `.h` : entête
138
        * `.c` : sources
139
1. Contenus
140
    * Section Doxygen :
141
        1. `@file` : Le nom du fichier
142
        1. `@brief`: Une brève description
143
        1. `@version`: Le numéro de version
144
        1. `@date`: La date de dernière modification
145
        1. `@author`: Une liste des participant(e)s et leur courriel
146
        1. `@copyright`: La liste des années et participant(e)s
147
    * Les fichiers d’entête contiennent en plus
148
        1. Une définition macro pour éviter de ré-inclure le fichier (<https://fr.wikipedia.org/wiki/Include_guard>).
149
150
151 1 Patrice Nadeau
152 159 Patrice Nadeau
[[Atmel AVR]]