Wiki » Historique » Version 198
Patrice Nadeau, 2026-01-18 20:18
| 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 | 198 | Patrice Nadeau | ## Structures |
| 142 | ```c |
||
| 143 | /** |
||
| 144 | * @brief Structure d'un menu local |
||
| 145 | * @sa MenuSelect |
||
| 146 | */ |
||
| 147 | struct menu { |
||
| 148 | /** @brief Caractère utilisé pour l'item */ |
||
| 149 | char choice; |
||
| 150 | /** @brief Description de l'item */ |
||
| 151 | char *item; |
||
| 152 | }; |
||
| 153 | ``` |
||
| 154 | 162 | Patrice Nadeau | |
| 155 | [[Fonctions]] |
||
| 156 | 1 | Patrice Nadeau | |
| 157 | 159 | Patrice Nadeau | [[Atmel AVR]] |