Projet

Général

Profil

Macros et préprocesseur » Historique » Version 6

Patrice Nadeau, 2024-03-09 11:48

1 5 Patrice Nadeau
# Macros et préprocesseur
2 4 Patrice Nadeau
Directives du préprocesseur gcc.
3 1 Patrice Nadeau
4
## Règles
5
1. Comportent au maximum 31 caractères
6
1. Commence par une lettre
7
1. Si plusieurs mots sont utilisés, ils sont séparées par des traits de soulignement
8
1. Les macros ne devant plus être utilisées, DOIVENT générer un message lors de la compilation avec `#pragma GCC poison`
9 3 Patrice Nadeau
10 1 Patrice Nadeau
    > Dans ce cas, la documentation doit indiquer le substitut à utiliser
11
    > Pour la définition d’une valeur entière signée (int), un enum DOIT être utilisé.
12 6 Patrice Nadeau
1. `ifdef` / `ifndef` : Utiliser une forme évitant les répétitions.
13
1. Macros `#warning` et `#error` : Utilisées pour afficher des avertissements ou des erreurs lors de la compilation.
14 1 Patrice Nadeau
15 6 Patrice Nadeau
    > N’est pas documenté dans Doxygen.
16
17
1. Un `#define` est utilisé pour remplacer une valeur au moment de la compilation
18
19
    > Pour la définition d'une valeur « integer », un `enum` DOIT être utilisé.
20 1 Patrice Nadeau
## Exemple
21
```c
22
/**
23 4 Patrice Nadeau
* @brief MACRO1
24
* @deprecated Utiliser NEWMACRO à la place
25
* @since Version x.x.xx
26
*/
27
#define MACRO1 43
28
#pragma GCC poison MACRO1
29
30
const char BLUE =
31
  #if ENABLED(FEATURE_ONE)
32
    '1'
33
  #else
34
    '0'
35
  #endif
36
;
37
38
#ifndef usart_AVR
39
    #error "__FILE_NAME__ n'est pas supporté sur ce AVR !"
40
#endif
41
42
#ifndef test
43
    #warning "test n'est pas défini!"
44
#endif
45
46
/**
47
* @name Nom des registres
48
*/
49
/** @{ */ 
50
/** @brief USART1 */
51
#define USART1 REG1
52
/** @brief USART2 */
53
#define USART2 REG2
54
/** @} */
55
56
USART1 = 0x0F;
57 1 Patrice Nadeau
```
58
59
## Justification
60 2 Patrice Nadeau
• [Linux kernel coding style](https://www.kernel.org/doc/html/v4.10/process/coding-style.html#naming)
61
• [GNU Coding Standards](https://www.gnu.org/prep/standards/html_node/Writing-C.html#Writing-C)
62
• [Embedded C Coding Standard](https://barrgroup.com/embedded-systems/books/embedded-c-coding-standard)
63 1 Patrice Nadeau
• Correspondance avec la fiche technique (datasheet)