Macros et préprocesseur » Historique » Révision 16
Révision 15 (Patrice Nadeau, 2024-03-09 12:07) → Révision 16/17 (Patrice Nadeau, 2024-03-09 14:28)
# Macros et préprocesseur Directives du préprocesseur gcc. ## Règles 1. Comportent au maximum 31 caractères 1. Commence par une lettre 1. Si plusieurs mots sont utilisés, ils sont séparées par des traits de soulignement 1. Les macros ne devant plus être utilisées, DOIVENT générer un message lors de la compilation avec *#pragma GCC poison* > Dans ce cas, la documentation doit indiquer le substitut à utiliser > Pour la définition d’une valeur entière signée (int), un *enum* DOIT être utilisé. 1. Définition conditionnel : Utiliser une forme évitant les répétitions. 1. Macros *#warning* et *#error* : Utilisées pour afficher des avertissements ou des erreurs lors de la compilation. > N’est pas documenté dans Doxygen. 1. Un *#define* est utilisé pour remplacer une valeur au moment de la compilation > Pour la définition d'une valeur « integer », un *enum* DOIT être utilisé. ## Exemple ```c /** * @brief MACRO1 * @deprecated Utiliser NEWMACRO à la place * @since Version x.x.xx */ #define MACRO1 43 #pragma GCC poison MACRO1 /** @brief Défini selon la macro *FEATURE_ONE* */ const char BLUE = #if defined (FEATURE_ONE) '1' #else '0' #endif ; #if !defined (usart_AVR) #error "__FILE_NAME__ n'est pas supporté sur ce AVR !" #endif #if !defined (test) #warning "test n'est pas défini!" #endif /** * @name Nom des registres */ /** @{ */ /** @brief USART1 */ #define USART1 REG1 /** @brief USART2 */ #define USART2 REG2 /** @} */ USART1 = 0x0F; ``` ## Justification • [Linux kernel coding style](https://www.kernel.org/doc/html/v4.10/process/coding-style.html#naming) • [GNU Coding Standards](https://www.gnu.org/prep/standards/html_node/Writing-C.html#Writing-C) • [Embedded C Coding Standard](https://barrgroup.com/embedded-systems/books/embedded-c-coding-standard) • Correspondance avec la fiche technique (datasheet)