Projet

Général

Profil

Wiki » Historique » Version 193

Patrice Nadeau, 2026-01-18 20:12

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