Advertisement
Guest User

Untitled

a guest
Oct 9th, 2015
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.42 KB | None | 0 0
  1. La norme de 42
  2. Version 2.0.0
  3. Mathieu mathieu@staff.42.fr
  4. Gaëtan gaetan@staff.42.fr
  5. Résumé: Ce document décrit la norme C en vigueur à 42. Une norme de
  6. programmation définit un ensemble de règles régissant l’écriture d’un code. Il est
  7. obligatoire de respecter la norme lorsque vous écrivez du C à 42.
  8. Table des matières
  9. I Avant-propos 2
  10. I.1 Pourquoi imposer une norme ? . . . . . . . . . . . . . . . . . . . . . . 2
  11. I.2 La norme dans vos rendus . . . . . . . . . . . . . . . . . . . . . . . . 2
  12. I.3 Conseils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
  13. I.4 Disclamers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
  14. II La norme de 42 3
  15. II.1 Convention de dénomination . . . . . . . . . . . . . . . . . . . . . . . 3
  16. II.2 Formattage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
  17. II.3 Paramètres de fonction . . . . . . . . . . . . . . . . . . . . . . . . . . 5
  18. II.4 Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
  19. II.5 Typedef, struct, enum et union . . . . . . . . . . . . . . . . . . . . . . 5
  20. II.6 Headers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
  21. II.7 Macros et Pré-processeur . . . . . . . . . . . . . . . . . . . . . . . . . 6
  22. II.8 Choses Interdites ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
  23. II.9 Commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
  24. II.10 Les fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
  25. II.11 Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
  26. 1
  27. Chapitre I
  28. Avant-propos
  29. Ce document décrit la norme C en vigueur à 42. Une norme de programmation définit
  30. un ensemble de règles régissant l’écriture d’un code. Il est obligatoire de respecter la norme
  31. lorsque vous écrivez du C à 42.
  32. I.1 Pourquoi imposer une norme ?
  33. La norme a deux objectifs principaux : Uniformiser vos codes afin que tout le monde
  34. puisse les lire facilement, étudiants et encadrants. Ecrire des codes simples et clairs.
  35. I.2 La norme dans vos rendus
  36. Tous vos fichiers de code C doivent respecter la norme de 42. La norme sera verifiée
  37. par vos correcteurs et la moindre faute de norme donnera la note de 0 à votre projet ou
  38. à votre exercice. Lors des peer-corrections votre correcteur devra lancer la "Norminette"
  39. sur votre rendu, seul le résultat de la "Norminette" doit être pris en compte.
  40. I.3 Conseils
  41. Comme vous le comprendrez rapidement, la norme n’est pas une contrainte. Au
  42. contraire, la norme est un garde-fou pour vous guider dans l’écriture d’un C simple et
  43. basique. C’est pourquoi il est absolument vital que vous codiez directement à la norme,
  44. q uite à coder plus lentement les premières heures. Un fichier de sources qui contient
  45. une faute de norme est aussi mauvais qu’un fichier qui en compte dix. Soyez studieux et
  46. appliqués, et la norme deviendra un automatisme sous peu.
  47. I.4 Disclamers
  48. Des bugs existent forcément sur la "Norminette", merci de les reporter sur la section
  49. du forum de l’intra. Néanmoins, la "Norminette" fait foi et vos rendus doivent s’adapter
  50. à ses bugs :).
  51. 2
  52. Chapitre II
  53. La norme de 42
  54. II.1 Convention de dénomination
  55. Partie obligatoire
  56. • Un nom de structure doit commencer par s_.
  57. • Un nom de typedef doit commencer par t_.
  58. • Un nom d’union doit commencer par u_.
  59. • Un nom d’enum doit commencer par e_.
  60. • Un nom de globale doit commencer par g_.
  61. • Les noms de variables, de fonctions doivent être composés exclusivement de minuscules,
  62. de chiffres et de ‘_’ (Unix Case).
  63. • Les noms de fichiers et de répertoires doivent être composés exclusivement de
  64. minuscules, de chiffres et de ‘_’ (Unix Case).
  65. • Le fichier doit être compilable.
  66. • Les caractère ne faisant pas partie de la table ascii standart ne sont pas autorisés.
  67. Partie conseillée
  68. • Les objets (variables, fonctions, macros, types, fichiers ou répertoires) doivent avoir
  69. les noms les plus explicites ou mnémoniques. Seul les ‘compteurs’ peuvent être
  70. nommés à votre guise.
  71. • Les abréviations sont tolérées dans la mesure où elles permettent de réduire signifi-
  72. cativement la taille du nom sans en perdre le sens. Les parties des noms composites
  73. seront séparées par ‘_’.
  74. • Tous les identifiants (fonctions, macros, types, variables, etc.) doivent être en anglais.
  75. • Toute utilisation de variable globale doit être justifiée.
  76. 3
  77. La norme de 42 Version 2.0.0
  78. II.2 Formattage
  79. Partie obligatoire
  80. • Tous vos fichiers devront commencer par le header standard de 42 dès la première
  81. ligne.
  82. • Chaque fonction doit faire au maximum 25 lignes sans compter les accolades du
  83. bloc de la fonction.
  84. • Chaque ligne ne peut faire plus de 80 colonnes, commentaire compris. Attention :
  85. une tabulation ne compte pas pour une colonne mais bien pour les n espaces qu’elle
  86. represente.
  87. • Une seule instruction par ligne.
  88. • Une ligne vide ne doit pas contenir d’espace ou de tabulation.
  89. • Une ligne ne devrait jamais se terminer par des espaces ou des tabulations.
  90. • Quand vous rencontrez une accolade ouvrante ou fermante ou une fin de structure
  91. de controle, vous devez retourner à la ligne.
  92. • Vous devez aussi indenter votre code avec des tabulations de 4 espaces. (Ce n’est
  93. pas équivalent à 4 espace, ce sont bien des tabulations.)
  94. • Chaque virgule ou point-virgule doit être suivi d’un espace si nous ne sommes pas
  95. en fin de ligne.
  96. • Chaque opérateur (binaire ou ternaire) et opérande doivent être séparé par un
  97. espace et seulement un.
  98. • Chaque mot clef du C doit être suivi d’un espace sauf pour les mot-clefs de type
  99. de variable (comme int, char, float, etc.) ainsi que sizeof. (On a gardé parce que
  100. KRP a dit 82 qui accessoirement est pair)
  101. • Chaque déclaration de variable doit être indentée sur la même colonne.
  102. • Les étoiles des pointeurs doivent être collés au nom de la variable.
  103. • Une seule déclaration de variable par ligne.
  104. • On ne peut faire une déclaration et une instanciation sur une même ligne, à l’exception
  105. des variables globales et des variables statiques.
  106. • Les déclarations doivent être en début de fonctions et doivent être séparées de
  107. l’implémentation par une ligne vide.
  108. • Aucune ligne vide ne doit être présente au milieu des déclarations ou de l’implé-
  109. mentation.
  110. • Vous pouvez retourner à la ligne lors d’une même instruction ou structure de
  111. contrôle, mais vous devez rajouter une indentation par parenthèse ou opérateur
  112. d’affectation. Les opérateurs doivent être en début de ligne.
  113. 4
  114. La norme de 42 Version 2.0.0
  115. toto = 42 + 5
  116. - 28; //RIGHT (Mais lecture difficile :P)
  117. if (toto == 0
  118. && titi == 2
  119. && (tutu == 3 //RIGHT (Mais lecture difficile :P)
  120. || tata == 4)
  121. || rara == 3)
  122. • La multiple assignation est interdite.
  123. II.3 Paramètres de fonction
  124. Partie obligatoire
  125. • Une fonction prend au maximum 4 paramètres nommés.
  126. • Une fonction qui ne prend pas d’argument doit explicitement être prototypée avec
  127. le mot void comme argument.
  128. II.4 Fonctions
  129. Partie obligatoire
  130. • Les prototypes de fonction doivent posséder des noms de variable.
  131. • Chaque définition de fonction doit être séparé par une ligne vide.
  132. Partie conseillée
  133. • Vos noms de fonctions doivent être alignés dans un même fichier. Cela s’applique
  134. aux headers.
  135. II.5 Typedef, struct, enum et union
  136. Partie obligatoire
  137. • Vous devez mettre une tabulation lorsque vous déclarez une struct, enum ou union.
  138. • Lors de la déclaration d’une variable de type struct, enum ou union vous ne mettrez
  139. qu’un espace dans le type.
  140. • Vous devez utiliser une tabulation entre les deux paramètres d’un typedef.
  141. • Lorsque vous déclarez une struct, union ou enum avec un typedef, toutes les règles
  142. s’appliquent et vous devez aligner le nom du typedef avec le nom de la struct,
  143. union ou enum.
  144. • Vous ne pouvez pas déclarer une structure dans un fichier .c.
  145. 5
  146. La norme de 42 Version 2.0.0
  147. II.6 Headers
  148. Partie obligatoire
  149. • Seuls les inclusions de headers (système ou non), les définitions, les defines, les
  150. prototypes et les macros sont autorisés dans les fichiers headers.
  151. • Tous les includes de .h doivent se faire au début du fichier (.c ou .h).
  152. • On protégera les headers contre la double inclusion. Si le fichier est ft_foo.h, la
  153. macro témoin est ‘FT_FOO_H’.
  154. • Les prototypes de fonctions doivent se trouver exclusivement dans des fichiers .h.
  155. • Une inclusion de header (.h) dont on ne se sert pas est interdite.
  156. Partie conseillée
  157. • Toute inclusion de header doit etre justifiée autant dans un .c que dans un .h.
  158. II.7 Macros et Pré-processeur
  159. Partie obligatoire
  160. • Les defines définissant du code sont interdits.
  161. • Les macros multilignes sont interdites.
  162. • Seuls les noms de macros sont en majuscules
  163. • Il faut indenter les caractères qui suivent un #if , #ifdef ou #ifndef
  164. II.8 Choses Interdites !
  165. Partie obligatoire
  166. • Vous n’avez pas le droit d’utiliser :
  167. ◦ for (parce que c’est tombé sur face)
  168. ◦ do...while
  169. ◦ switch
  170. ◦ case
  171. ◦ goto
  172. • Les opérateurs ternaires ‘ ?’ imbriqués
  173. 6
  174. La norme de 42 Version 2.0.0
  175. II.9 Commentaires
  176. Partie obligatoire
  177. • Les commentaires peuvent se trouver dans tous les fichiers source.
  178. • Il ne doit pas y avoir de commentaires dans le corps des fonctions.
  179. • Les commentaires sont commencés et terminés par une ligne seule. Toutes les lignes
  180. intermédiaires s’alignent sur elles, et commencent par ‘**’.
  181. • Pas de commentaire en //.
  182. Partie conseillée
  183. • Vos commentaires doivent être en anglais et utiles.
  184. • Le commentaire ne peut pas justifier une fonction bâtarde.
  185. II.10 Les fichiers
  186. Partie obligatoire
  187. • Vous ne pouvez inclure un .c.
  188. • Vous ne pouvez avoir plus de 5 définitions de fonction dans un .c.
  189. II.11 Makefile
  190. Partie conseillée
  191. • Les règles $(NAME), clean, fclean, re et all sont obligatoires.
  192. • Le projet est considéré comme non fonctionnel si le makefile relink.
  193. • Dans le cas d’un projet multibinaire, en plus des règles précédentes, vous devez
  194. avoir une règle all compilant les deux binaires ainsi qu’une règle spécifique à chaque
  195. binaire compilé.
  196. • Dans le cas d’un projet faisant appel à une bibliothèque de fonctions (par exemple
  197. une libft), votre makefile doit compiler automatiquement cette bibliothèque.
  198. • L’utilisation de ‘wildcard’ (*.c par exemple) est interdite.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement