Projet

Général

Profil

Wiki » Historique » Version 192

Patrice Nadeau, 2026-01-18 20:11

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