Projet

Général

Profil

Wiki » Historique » Version 194

Patrice Nadeau, 2026-01-18 20:14

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 182 Patrice Nadeau
## Identifiants
21
1. Ne DOIT PAS contenir plus de **31** caractères 
22
    > ANSI standards
23
    * a @ z
24
    * A @ Z
25
    * 0 @ 9
26
    * Trait de soulignement (__)
27 186 Patrice Nadeau
1. En **anglais américain** :
28 185 Patrice Nadeau
    * Lettres
29
        * Macros :
30
            * Majuscules et minuscules
31
                > La parie principale DOIT être en majuscule
32
        * Fonctions, variables, énumérations, structures, définition de type : 
33
            * Minuscules
34
    * Nombre
35
    * Commence par une lettre
36
    * Si plusieurs mots sont utilisés, ils DOIVENT être séparées par des traits de soulignement
37 1 Patrice Nadeau
38 187 Patrice Nadeau
1. Déclaration
39
    1. Un objet ayant une visibilité locale DOIT avoir le modificateur `static` 
40
    1. Un objet « obsolète », DOIT avoir :
41
        1. Un des attributs :
42
            > Génération de message lors de la compilation (`-Wall`)
43
            * `deprecated` 
44
            * `unavailable`
45
        1. Les commentaires Doxygen : 
46
            * `@deprecated` : Indications sur le remplacement à utiliser
47
            * `@since` : Depuis quel version le changement est apparue
48
49
50 184 Patrice Nadeau
## Fichiers
51
Structure des répertoires et fichiers
52
53
> Format selon la commande `tree --charset ascii`
54
55
```
56
.
57
|-- AUTHORS : Fichier contenant les noms et courriels des auteurs
58
|-- bin : Répertoire contenant le fichier exécutable et les librairies compilées
59
|-- ChangeLog : Fichier des changements
60
|-- config.h : Fichier optionel contenant les macros communes au programme dans son ensemble (-imacros)
61
|-- COPYING : Fichier de licence (standard GNU)
62
|-- docs : Répertoire de la documentation (.pdf)
63
|-- include : Répertoire des fichiers d’en-tête (.h)
64
|-- INSTALL
65
|-- lib : Répertoire des libraires externes (liens symboliques)
66
|-- Makefile.in : Fichier d'informations spécifiques du projet pour le Makefile
67
|-- NEWS :
68
|-- obj : Répertoire contenant les objets (.o)
69
|-- README : Fichier d'informations du projet, en format markdown
70
`-- src : Répertoire des fichiers sources (.c)
71
```
72
73
## Fichiers sources
74
1. Nom du fichier :
75
    * Un préfixe en anglais de **8** caractères maximum pouvant contenir :
76
        * Lettres minuscule
77
        * Chiffres
78
        * Trait de soulignement
79
    * DOIT contenir un des suffixe suivants : 
80
        * `.h` : entête
81
        * `.c` : sources
82
1. Contenus
83
    * Section Doxygen :
84
        1. `@file` : Le nom du fichier
85
        1. `@brief`: Une brève description
86
        1. `@version`: Le numéro de version
87
        1. `@date`: La date de dernière modification
88
        1. `@author`: Une liste des participant(e)s et leur courriel
89
        1. `@copyright`: La liste des années et participant(e)s
90
    * Les fichiers d’entête contiennent en plus
91
        1. Une définition macro pour éviter de ré-inclure le fichier (<https://fr.wikipedia.org/wiki/Include_guard>).
92
93 162 Patrice Nadeau
[[Style]]
94 1 Patrice Nadeau
95 183 Patrice Nadeau
## Commentaires
96 182 Patrice Nadeau
1. Précède l’élément à documenté, avec la même indentation
97
1. En minuscules et commence par une majuscule
98
1. Phrase complète en français
99
1. Sur une ou plusieurs lignes
100 191 Patrice Nadeau
1. De style C (/*... */)
101
1. Doxygen DOIT aussi être utilisé
102
    1. Les « décorations » (gras, italique, etc.) sont faites avec la syntaxe Markdown
103 82 Patrice Nadeau
104 192 Patrice Nadeau
## Macros et préprocesseur
105
Directives du préprocesseur gcc.
106
107
1. Les macros ne devant plus être utilisées, DOIVENT générer un message lors de la compilation avec *#pragma GCC poison*
108
109
    > Dans ce cas, la documentation doit indiquer le substitut à utiliser
110
    > Pour la définition d’une valeur entière signée (int), un `enum` DOIT être utilisé.
111
1. Définition conditionnel : Utiliser une forme évitant les répétitions.
112
1. Macros *#warning* et *#error* : Utilisées pour afficher des avertissements ou des erreurs lors de la compilation.
113
114
    > N’est pas documenté dans Doxygen.
115
116
1. Un *#define* est utilisé pour remplacer une valeur au moment de la compilation
117
118
    > Pour la définition d'une valeur « integer », un *enum* DOIT être utilisé.
119 162 Patrice Nadeau
120
[[Énumérations]]
121
122
[[Typedef]]
123
124
[[Variables]]
125
126
[[Structures]]
127
128
[[Fonctions]]
129 1 Patrice Nadeau
130 159 Patrice Nadeau
[[Atmel AVR]]