Projet

Général

Profil

Macros et préprocesseur » Historique » Version 12

Patrice Nadeau, 2024-03-09 11:59

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 8 Patrice Nadeau
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 12 Patrice Nadeau
    > Pour la définition d’une valeur entière signée (int), un *enum* DOIT être utilisé.
12
1. Définition conditionnel : Utiliser une forme évitant les répétitions.
13 8 Patrice Nadeau
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 8 Patrice Nadeau
1. Un *#define* est utilisé pour remplacer une valeur au moment de la compilation
18 6 Patrice Nadeau
19 8 Patrice Nadeau
    > Pour la définition d'une valeur « integer », un *enum* DOIT être utilisé.
20 7 Patrice Nadeau
21 1 Patrice Nadeau
## Exemple
22
```c
23
/**
24 4 Patrice Nadeau
* @brief MACRO1
25
* @deprecated Utiliser NEWMACRO à la place
26
* @since Version x.x.xx
27
*/
28
#define MACRO1 43
29
#pragma GCC poison MACRO1
30
31 10 Patrice Nadeau
/** @brief Défini selon la macro *FEATURE_ONE* */
32 4 Patrice Nadeau
const char BLUE =
33
  #if ENABLED(FEATURE_ONE)
34
    '1'
35
  #else
36
    '0'
37
  #endif
38
;
39
40 11 Patrice Nadeau
#if !defined (usart_AVR)
41 4 Patrice Nadeau
    #error "__FILE_NAME__ n'est pas supporté sur ce AVR !"
42
#endif
43
44 11 Patrice Nadeau
#if !defined(test)
45 4 Patrice Nadeau
    #warning "test n'est pas défini!"
46
#endif
47
48
/**
49
* @name Nom des registres
50
*/
51
/** @{ */ 
52
/** @brief USART1 */
53
#define USART1 REG1
54
/** @brief USART2 */
55
#define USART2 REG2
56
/** @} */
57
58
USART1 = 0x0F;
59 1 Patrice Nadeau
```
60
61
## Justification
62 2 Patrice Nadeau
• [Linux kernel coding style](https://www.kernel.org/doc/html/v4.10/process/coding-style.html#naming)
63
• [GNU Coding Standards](https://www.gnu.org/prep/standards/html_node/Writing-C.html#Writing-C)
64
• [Embedded C Coding Standard](https://barrgroup.com/embedded-systems/books/embedded-c-coding-standard)
65 1 Patrice Nadeau
• Correspondance avec la fiche technique (datasheet)