La norme de 42. Version 2.0.0

Documents pareils
Introduction au langage C

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Programmation en langage C

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Conventions d écriture et outils de mise au point

Quelques éléments de compilation en C et makefiles

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Cours Langage C/C++ Programmation modulaire

Algorithmique et Programmation, IMA

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Bases de programmation. Cours 5. Structurer les données

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

SUPPORT DE COURS. Langage C

Langage Éric Guérin 5 octobre 2010

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Le langage C. Introduction, guide de reference

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java


Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Cours d Algorithmique et de Langage C v 3.0

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Présentation du PL/SQL

Chap III : Les tableaux

Chapitre 1 : La gestion dynamique de la mémoire

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

INF 321 : mémento de la syntaxe de Java

UE Programmation Impérative Licence 2ème Année

REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET POPULAIRE UNIVERSITE M HAMED BOGARA DE BOUMERDES

Les structures de données. Rajae El Ouazzani

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Les chaînes de caractères

INITIATION A LA PROGRAMMATION

Claude Delannoy. 3 e édition C++

UE C avancé cours 1: introduction et révisions

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Travaux Dirigés n 1 : chaînes de caractères

Introduction à l algorithmique et à la programmation M1102 CM n 3

Le langage C. Séance n 4

Les structures. Chapitre 3

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Méthodes de programmation systèmes UE n NSY103. Notes de cours. Nombre d'heures : 55h (~ cours de 3 heures)

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Programmation C. J.-F. Lalande. 15 novembre 2012

Utilisation d objets : String et ArrayList

I. Introduction aux fonctions : les fonctions standards

Initiation. àl algorithmique et à la programmation. en C

Systeme d'exploitation

Programmation en C/C++

STAGE IREM 0- Premiers pas en Python

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Arguments d un programme

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Algorithmique, Structures de données et langage C

TP1 : Initiation à Java et Eclipse

Poker. A rendre pour le 25 avril

Programmation en C. École Nationale Supérieure de Techniques Avancées. Pierre-Alain Fouque et David Pointcheval

Cours d initiation à la programmation en C++ Johann Cuenin

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon

Présentation du langage et premières fonctions

Support de Cours de Langage C. Christian Bac

Cours de C/C++ par la pratique. Hugues Talbot

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Programmation Classique en langage C

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Chapitre 2. Classes et objets

Cours de programmation avancée. Le langage C. Université du Luxembourg

TP3 Intégration de pratiques agiles. 1. User Stories (1) Scénario d intégration agile. En direct-live du château

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Tp 1 correction. Structures de données (IF2)

Plan du cours. Historique du langage Nouveautés de Java 7

Programmer en JAVA. par Tama

Le prototype de la fonction main()

Introduction à la Programmation Parallèle: MPI

L informatique en BCPST

TP, première séquence d exercices.

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Introduction au Langage de Programmation C

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Chapitre I Notions de base et outils de travail

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

Bernard Lecomte. Débuter avec HTML

Analyse de sécurité de logiciels système par typage statique

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

COMPTABILITE SAGE LIGNE 30

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Le Langage C++ Patrick TRAU - ULP IPST version du 02/10/05

Flux de données Lecture/Ecriture Fichiers

Une introduction à Java

Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string

NORMES DE PRÉSENTATION DES MANUSCRITS

OS Réseaux et Programmation Système - C5

Transcription:

La norme de 42 Version 2.0.0 Mathieu mathieu@staff.42.fr Gaëtan gaetan@staff.42.fr Résumé: Ce document décrit la norme C en vigueur à 42. Une norme de programmation définit un ensemble de règles régissant l écriture d un code. Il est obligatoire de respecter la norme lorsque vous écrivez du C à 42.

Table des matières I Avant-propos 2 I.1 Pourquoi imposer une norme?...................... 2 I.2 La norme dans vos rendus........................ 2 I.3 Conseils.................................. 2 I.4 Disclamers................................. 2 II La norme de 42 3 II.1 Convention de dénomination....................... 3 II.2 Formattage................................. 4 II.3 Paramètres de fonction.......................... 5 II.4 Fonctions.................................. 5 II.5 Typedef, struct, enum et union...................... 5 II.6 Headers................................... 6 II.7 Macros et Pré-processeur......................... 6 II.8 Choses Interdites!............................. 6 II.9 Commentaires............................... 7 II.10 Les fichiers................................. 7 II.11 Makefile.................................. 7 1

Chapitre I Avant-propos Ce document décrit la norme C en vigueur à 42. Une norme de programmation définit un ensemble de règles régissant l écriture d un code. Il est obligatoire de respecter la norme lorsque vous écrivez du C à 42. I.1 Pourquoi imposer une norme? La norme a deux objectifs principaux : Uniformiser vos codes afin que tout le monde puisse les lire facilement, étudiants et encadrants. Ecrire des codes simples et clairs. I.2 La norme dans vos rendus Tous vos fichiers de code C doivent respecter la norme de 42. La norme sera verifiée par vos correcteurs et la moindre faute de norme donnera la note de 0 à votre projet ou à votre exercice. Lors des peer-corrections votre correcteur devra lancer la "Norminette" sur votre rendu, seul le résultat de la "Norminette" doit être pris en compte. I.3 Conseils Comme vous le comprendrez rapidement, la norme n est pas une contrainte. Au contraire, la norme est un garde-fou pour vous guider dans l écriture d un C simple et basique. C est pourquoi il est absolument vital que vous codiez directement à la norme, q uite à coder plus lentement les premières heures. Un fichier de sources qui contient une faute de norme est aussi mauvais qu un fichier qui en compte dix. Soyez studieux et appliqués, et la norme deviendra un automatisme sous peu. I.4 Disclamers Des bugs existent forcément sur la "Norminette", merci de les reporter sur la section du forum de l intra. Néanmoins, la "Norminette" fait foi et vos rendus doivent s adapter à ses bugs :). 2

Chapitre II La norme de 42 II.1 Convention de dénomination Un nom de structure doit commencer par s_. Un nom de typedef doit commencer par t_. Un nom d union doit commencer par u_. Un nom d enum doit commencer par e_. Un nom de globale doit commencer par g_. Les noms de variables, de fonctions doivent être composés exclusivement de minuscules, de chiffres et de _ (Unix Case). Les noms de fichiers et de répertoires doivent être composés exclusivement de minuscules, de chiffres et de _ (Unix Case). Le fichier doit être compilable. Les caractère ne faisant pas partie de la table ascii standart ne sont pas autorisés. Les objets (variables, fonctions, macros, types, fichiers ou répertoires) doivent avoir les noms les plus explicites ou mnémoniques. Seul les compteurs peuvent être nommés à votre guise. Les abréviations sont tolérées dans la mesure où elles permettent de réduire significativement la taille du nom sans en perdre le sens. Les parties des noms composites seront séparées par _. Tous les identifiants (fonctions, macros, types, variables, etc.) doivent être en anglais. Toute utilisation de variable globale doit être justifiée. 3

La norme de 42 Version 2.0.0 II.2 Formattage Tous vos fichiers devront commencer par le header standard de 42 dès la première ligne. Chaque fonction doit faire au maximum 25 lignes sans compter les accolades du bloc de la fonction. Chaque ligne ne peut faire plus de 80 colonnes, commentaire compris. Attention : une tabulation ne compte pas pour une colonne mais bien pour les n espaces qu elle represente. Une seule instruction par ligne. Une ligne vide ne doit pas contenir d espace ou de tabulation. Une ligne ne devrait jamais se terminer par des espaces ou des tabulations. Quand vous rencontrez une accolade ouvrante ou fermante ou une fin de structure de controle, vous devez retourner à la ligne. Vous devez aussi indenter votre code avec des tabulations de 4 espaces. (Ce n est pas équivalent à 4 espace, ce sont bien des tabulations.) Chaque virgule ou point-virgule doit être suivi d un espace si nous ne sommes pas en fin de ligne. Chaque opérateur (binaire ou ternaire) et opérande doivent être séparé par un espace et seulement un. Chaque mot clef du C doit être suivi d un espace sauf pour les mot-clefs de type de variable (comme int, char, float, etc.) ainsi que sizeof. (On a gardé parce que KRP a dit 82 qui accessoirement est pair) Chaque déclaration de variable doit être indentée sur la même colonne. Les étoiles des pointeurs doivent être collés au nom de la variable. Une seule déclaration de variable par ligne. On ne peut faire une déclaration et une instanciation sur une même ligne, à l exception des variables globales et des variables statiques. Les déclarations doivent être en début de fonctions et doivent être séparées de l implémentation par une ligne vide. Aucune ligne vide ne doit être présente au milieu des déclarations ou de l implémentation. Vous pouvez retourner à la ligne lors d une même instruction ou structure de contrôle, mais vous devez rajouter une indentation par parenthèse ou opérateur d affectation. Les opérateurs doivent être en début de ligne. 4

La norme de 42 Version 2.0.0 toto = 42 + 5-28; //RIGHT (Mais lecture difficile :P) if (toto == 0 && titi == 2 && (tutu == 3 tata == 4) rara == 3) //RIGHT (Mais lecture difficile :P) La multiple assignation est interdite. II.3 Paramètres de fonction Une fonction prend au maximum 4 paramètres nommés. Une fonction qui ne prend pas d argument doit explicitement être prototypée avec le mot void comme argument. II.4 Fonctions Les prototypes de fonction doivent posséder des noms de variable. Chaque définition de fonction doit être séparé par une ligne vide. Vos noms de fonctions doivent être alignés dans un même fichier. Cela s applique aux headers. II.5 Typedef, struct, enum et union Vous devez mettre une tabulation lorsque vous déclarez une struct, enum ou union. Lors de la déclaration d une variable de type struct, enum ou union vous ne mettrez qu un espace dans le type. Vous devez utiliser une tabulation entre les deux paramètres d un typedef. Lorsque vous déclarez une struct, union ou enum avec un typedef, toutes les règles s appliquent et vous devez aligner le nom du typedef avec le nom de la struct, union ou enum. Vous ne pouvez pas déclarer une structure dans un fichier.c. 5

La norme de 42 Version 2.0.0 II.6 Headers Seuls les inclusions de headers (système ou non), les définitions, les defines, les prototypes et les macros sont autorisés dans les fichiers headers. Tous les includes de.h doivent se faire au début du fichier (.c ou.h). On protégera les headers contre la double inclusion. Si le fichier est ft_foo.h, la macro témoin est FT_FOO_H. Les prototypes de fonctions doivent se trouver exclusivement dans des fichiers.h. Une inclusion de header (.h) dont on ne se sert pas est interdite. Toute inclusion de header doit etre justifiée autant dans un.c que dans un.h. II.7 Macros et Pré-processeur Les defines définissant du code sont interdits. Les macros multilignes sont interdites. Seuls les noms de macros sont en majuscules Il faut indenter les caractères qui suivent un #if, #ifdef ou #ifndef II.8 Choses Interdites! Vous n avez pas le droit d utiliser : for (parce que c est tombé sur face) do...while switch case goto Les opérateurs ternaires? imbriqués 6

La norme de 42 Version 2.0.0 II.9 Commentaires Les commentaires peuvent se trouver dans tous les fichiers source. Il ne doit pas y avoir de commentaires dans le corps des fonctions. Les commentaires sont commencés et terminés par une ligne seule. Toutes les lignes intermédiaires s alignent sur elles, et commencent par **. Pas de commentaire en //. Vos commentaires doivent être en anglais et utiles. Le commentaire ne peut pas justifier une fonction bâtarde. II.10 Les fichiers Vous ne pouvez inclure un.c. Vous ne pouvez avoir plus de 5 définitions de fonction dans un.c. II.11 Makefile Les règles $(NAME), clean, fclean, re et all sont obligatoires. Le projet est considéré comme non fonctionnel si le makefile relink. Dans le cas d un projet multibinaire, en plus des règles précédentes, vous devez avoir une règle all compilant les deux binaires ainsi qu une règle spécifique à chaque binaire compilé. Dans le cas d un projet faisant appel à une bibliothèque de fonctions (par exemple une libft), votre makefile doit compiler automatiquement cette bibliothèque. L utilisation de wildcard (*.c par exemple) est interdite. 7