Projet

Général

Profil

Identifiants » Historique » Révision 11

Révision 10 (Patrice Nadeau, 2024-01-27 15:25) → Révision 11/38 (Patrice Nadeau, 2024-01-27 15:26)

# Objets 

 ## Règles 

 1. Comportent au maximum **31** caractères : 
     1. Lettres minuscules 
         > Les macros sont en lettres majuscules 
     1. Nombres 
     1. Trait de soulignement 
 1. Si plusieurs mots sont utilisés, ils sont séparées par des traits de soulignement 
 1. Les objets ne devant plus être utilisés, DOIVENT générer un message lors de la compilation (`-Wall`) si un appel est effectué. 
     1. Les attributs`deprecated` ou `unavailable` DOIVENT être ajoutés à la déclaration. 
     1. Les commentaires Doxygen suivants doivent être ajoutés :  
         1. `@deprecated` : 
         1. `@since` : 

 ## Exemple 
 ``` c 
 /** 
  * @brief OldFunction 
  * @deprecated Utiliser NewFunction à la place 
  * @since Version x.x.xx 
  */ 
 int OldFunction(void) __attribute__((deprecated)); 

 /** 
  * @brief OldFunction 
  * @deprecated Utiliser NewFunction à la place 
  * @since Version x.x.xx 
  */ 
 int OldFunction(void) __attribute__((unavailable)); 

 /** 
 * @brief MACRO1 
 * @deprecated Utiliser NEWMACRO à la place 
 * @since Version x.x.xx 
 */ 
 #define MACRO1 43 
 #pragma GCC poison MACRO1 
 ``` 

 ## 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> 

 ### Déclarations locales 

 Une déclaration n’ayant qu’une visibilité locale DOIT : 
 * Être de classe `static` 

 Exemple: 
 ``` c 
 /** 
  * @brief Fonction locale 
  * @return Une valeur 
  */ 
 static int local_func(void) { 
     ... 
     return 0; 
 } 
 ``` 

 ### Constantes 

 Utilisé au lieu d’une macro quand le type ou la visibilité de la variable doit être définis. 

 Exemple : 

 ``` c 
 /**  
  * @name Liste des constantes 
  * @brief 
  */ 
 /** @{ */ 
 /** @brief La chaîne d'initialisation du projet */ 
 static const char INIT_STR[6] = "POWER"; 
 /** @brief Constante globale de la librairie `random` */ 
 extern int RANDOM_MAX = 25; 
 /** @} */ 

 /** @brief Constante */ 
 const int ANSWER 42; 
 ``` 

 ### Typedef 

 Format : 
 * En minuscule, suivie de **_t** 

 Exemple : 
 ``` c 
 /** Type de la structure dans la librairie `ds1305` */ 
 typedef struct { 
     /** @brief Dernier deux chiffres : &ge; 00, &le; 99 */ 
     uint8_t year; 
     /** @brief 01 - 12 */ 
     uint8_t month; 
     /** @brief 01 - 31 */ 
     uint8_t date; 
     /** @brief 1 - 7 */ 
     uint8_t day; 
     /** @brief 00 - 23 */ 
     uint8_t hours; 
     /** @brief 00 - 59 */ 
     uint8_t minutes; 
     /** @brief 00 - 59 */ 
     uint8_t seconds; 
 } ds1305_time_t; 
 ``` 

 ### Variables 

 Exemple : 
 ``` c 
 /** @brief Variable locale */ 
 static int ctr; 
 /** @brief Variable globale */ 
 int RANDOM_CTR; 
 ```