Objectifs. Arguments de main() Précompilateur. Compilation séparée. Makefiles

Dimension: px
Commencer à balayer dès la page:

Download "Objectifs. Arguments de main() Précompilateur. Compilation séparée. Makefiles"

Transcription

1 du cours d aujourd hui Programmation «orientée système» LANGAGE C COMPILATION passer des arguments à son programme directives de précompilation compilation Makefile Laboratoire d Intelligence Artificielle Faculté I&C Programmation Orientée Système Langage C 1 / 54 Programmation Orientée Système Langage C 2 / 54 Mon programme dans son environnement Valeur de retour de Votre programme est exécuté par la machine dans un environnement : interpréteur de commandes / système d exploitation Que signifie cet entier retourné par? Il peut donc interagir avec eux (cf par exemple les flots). Votre programme est un processus du système, une sorte de «fonction» du système En fait, est une fonction (presque) comme les autres, qui a juste les spécificités : de toujours être appelée en premier ; de n avoir que deux prototypes possibles. C est le «statut» retourné au système d exploitation par le processus correspondant au programme. Rappel : la variable $? du Shell Choisir : la valeur 0 (ou mieux : EXIT_SUCCESS, qui est défini dans stdlib.h) si tout va bien, autre chose, s il y a une erreur (un code à vous ou alors EXIT_FAILURE). C est donc à elle de gérer les interactions avec l environnement d appel. Programmation Orientée Système Langage C 3 / 54 Programmation Orientée Système Langage C 4 / 54

2 (2) On a vu le prototype int main(void); Dans le prototype int main(int argc, char* argv[]) Quel est l autre prototype de? argc est un entier comptant le nombres d arguments (+1) passés au programme argv est un tableau de pointeurs sur des caractères : tableau des arguments int main(int argc, char* argv[]) argv[0] correspond au nom du programme. Ces arguments sont les paramètres donnés par l interpréteur de commandes appellant la fonction main. Exemple : passer une option «-v» et un fichier à un programme monprogramme -v fichier Exemple : monprogramme -v fichier argv[0] argv[1] argv[2] argc=3 Programmation Orientée Système Langage C 5 / 54 Programmation Orientée Système Langage C 6 / 54 Traitement des arguments de int main(int argc, char* argv[]) int erreur; erreur = traite_arguments(&argc, argv); if (erreur!= OK) return erreur; On peut distinguer 3 types d arguments obligatoires e.g. un nom de fichier : rm fichier optionnels e.g. une option d affichage : ls -l un const int défini au préalable, par exemple EXIT_SUCCESS optionnels avec arguments e.g. changer une valeur par défaut : dvips -o masortie.ps Exemple int traite_arguments(int* nb, char** argv) int required = 0; /* nb d'arguments obligatoires déjà traités */ char const * const pgm_name = argv[0]; /* le nom du programme */ ++argv; --(*nb); /* passe à l'argument suivant */ while ((*nb) > 0) /* tant qu'il y a des arguments */ if (!strcmp(argv[0], "-P")) /* option -P */ /* par exemple, avec option_p une variable globale, ou mieux un champ de structure passée en paramètre */ option_p = 1; else if (!strcmp(argv[0], "-i")) /* une option avec 1 argument : par exemple -i nom */ option_i = 1; ++argv; --(*nb); /* passe à l'argument suivant */ if (*nb == 0) /* si l'argument de l'option n'est pas là*/ fprintf(stderr, "ERREUR: pas d'argument pour l'option -i\n"); return ERREUR_I; /* une constante définie globalement */ Programmation Orientée Système Langage C 7 / 54 Programmation Orientée Système Langage C 8 / 54

3 else /* traite l'argument de l'option */ fait_ce_qui_faut(argv[0]); else /* traite les arguments obligatoires */ if (required >= NB_REQUIRED) fprintf(stderr, "ERREUR: je ne comprend pas l'option %s\n", argv[0]); return ERREUR_UNK; else soccupe_argument_obligatoire(argv[0]); ++required; ++argv; --(*nb); /* passe à l'argument suivant */ /* vérifie qu'on a bien eu tous les arguments obligatoires */ if (required!= NB_REQUIRED) fprintf(stderr, "ERREUR: il manque des arguments\n"); return ERREUR_LESS; return OK; d un programme C fichier source hello.c #include <stdio.h> int main(void) printf("hello World!\n"); return 0; compilateur commande : gcc hello.c -o hello fichier exécutable hello Programmation Orientée Système Langage C 9 / 54 Programmation Orientée Système Langage C 10 / 54 Précompilation La compilation est, en fait, une étape un peu plus compliquée que ce que nous avons vu jusque maintenant. Le compilateur (par abus de langage) effectue en effet plusieurs opérations successives : La précompilation, dont le rôle est de substituer les macros (récriture) choisir les lignes de codes en compilation conditionnelle inclure les fichiers demandés (directive #include) la compilation proprement dite, qui produit du code assembleur l assemblage du code assembleur en code objet l édition de liens entre différents codes objets pour en faire un code exécutable (un code «chargeable», en toute rigueur). Nous ne parlerons pas du tout de la troisième étape (ni d assembleur) dans ce cours. d un programme C fichier source précompilateur gcc -E hello_e.c fichier source 2 compilateur gcc -S typedef long unsigned int size_t; fichier ASM typedef unsigned char u_char; typedef unsigned short int u_short; typedef unsigned int u_int; typedef unsigned long int u_long; typedef signed char int8_t; typedef unsigned char uint8_t; typedef signed short int int16_t; typedef unsigned short int uint16_t; typedef signed int int32_t; assemblage gcc -c fichier «objet» hello.asm.lc0: main:.lfb0: éd. liens ld fichier exécutable.file "hello.c".section.rodata.string "Hello World!".text.globl main.type pushq %rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16 movq %rsp, %rbp.cfi_def_cfa_register 6 movl $.LC0, %edi Programmation Orientée Système Langage C 11 / 54 Programmation Orientée Système Langage C 12 / 54

4 Macros de précompilation La commande #define, déjà rencontrée au moment des tableaux, est, en fait, un moyen (trop?) puissant de récriture de code. #define (suite) Attention! Il faut bien comprendre que cela ne fait que récrire du code avant de le passer au compilateur. En se rappelant bien cela, on évitera peut être de commettre des erreurs classiques (voir plus loin). La syntaxe de #define est la suivante : #define alias ( arguments ) séquence_à_récrire où la portion ( arguments ) est optionnelle. Par exemple #define TAILLE_MAX 12 ne fait que dire au compilateur de remplacer chaque occurrence de la chaîne TAILLE_MAX par la séquence de caractères 12. Autre exemple (avec arguments) : #define affiche_entier(x) printf("%d\n", x) Ici l expression à remplacer sera également récrite mais en récrivant également le x par la chaîne de caractères donnée entre parenthèse à affiche_entier Ainsi affiche_entier(i); sera vu par le compilateur comme printf("%d\n", i); affiche_entier(12); comme printf("%d\n", 12); et affiche_entier(affiche_entier(i)); (pourquoi pas?) comme printf("%d\n", printf("%d\n", i)); Si celle-ci a ensuite un sens pour le compilateur, tant mieux ; sinon un message d erreur intervient lors de la compilation, mais concernant la chaîne remplacée! Ce qui est parfois source de confusion. Programmation Orientée Système Langage C 13 / 54 Programmation Orientée Système Langage C 14 / 54 #define (3) #define (4) On peut passer autant d arguments à la macro que l on veut, séparés par des virgules. Qu affiche le bout de code suivant? #define mult(x,y) x*y Exemple (à améliorer) : #define mult(x,y) x*y Autre exemple, plus classique : #define max(x,y) ((x) < (y)? (y) : (x)) Note :?: est un opérateur ternaire, tel que «A? B : C» vaut B si A est non nul (i.e. «vrai») et C sinon. printf("%d\n", mult(5-5, 7-2)); Réponse : Pourquoi? Appliquez bêtement le fonctionnement de #define : il récrit! Le bout de code précédent est donc vu par le compilateur comme printf("%d\n", 5-5*7-2); c est-à-dire (en mettant plus en évidence les règles de priorités) printf("%d\n", 5-5*7-2); Programmation Orientée Système Langage C 15 / 54 Programmation Orientée Système Langage C 16 / 54

5 #define (suite) CONSEIL (voire règle!) : PARENTHÈSEZ les arguments de vos macros! Écrivez #define mult(x,y) ((x)*(y)) (les deux parenthèses sont nécessaires), plutôt que #define mult(x,y) x*y #define (prise de tête) Il est possible de faire considérer les arguments d une macro comme une chaîne de caractères au sens du langage C (i.e. x "x") (Écrire pour cela #x au lieu de x) ou de concaténer un argument avec les caractères voisins, en utilisant ## Note : ce dernier moyen permet d avoir un mécanisme sommaire similaire aux templates du C++ (mais à déconseiller, dans ce cas passez plutôt à C++!) Exemples : Autre conseil : N utilisez PAS de macros, à moins de très bien savoir ce que vous faites Leur utilisation contient encore d autres pièges (évaluation multiple des arguments) Préférez des fonctions ou des constantes lorsque c est possible. #define affiche(fmt,var) printf("ici, " #var "=" #fmt "\n", var) affiche(%d, i); #define coupledef(type) \ typedef struct type x; type y; couple_ ## type printf("ici, " "i" "=" "%d" "\n", i); coupledef(double); typedef struct double x; double y; couple_double; Programmation Orientée Système Langage C 17 / 54 Programmation Orientée Système Langage C 18 / 54 #define (prise de tête parfois bien pratique) Macros prédéfinies #include <stdio.h> #define SIZE 12 #define STR(X) #X #define INPUT_FMT(X) "%" STR(X) "s" LINE FILE DATE TIME STDC numéro de ligne courante dans le code source nom du fichier en train d être compilé date de la compilation heure de la compilation 1 si conformité au C standard demandée int main(void) char lu[size+1] = ""; lu[size] = '\0'; int status; status = scanf(input_fmt(size), lu); printf(">%s< (%d)\n", lu, status); return 0; Exemples d utilisation : fprintf(stderr, "Erreur ligne %d de %s : message d'erreur\n", LINE, FILE ); const char version[] = FILE " du " DATE " " TIME ; Programmation Orientée Système Langage C 19 / 54 Programmation Orientée Système Langage C 20 / 54

6 conditionnelle conditionnelle : Exemples La compilation conditionnelle permet de générer, avec le même code source, plusieurs programmes exécutables différents. Un exemple classique : Un exemple classique (recommandé) est de générer la version «normale» et la version «mise au point» (debug). [voir plus loin] La compilation conditionnelle se fait à l aide de l une des directives de précompilation suivante #if expression #ifdef identificateur #ifndef identificateur puis #elif ou #else, optionnels, et le tout terminé par. #ifndef M_PI #define M_PI Note : la constante M_PI (et d autres qui viennent du standard Unix98 et ont aussi été disponibles en 4.4BSD) n est en toute rigueur pas définie dans le standard C (ni 89, ni 99, ni 11) :-(. Elle est souvent fournie «à bien plaire» par les compilateurs, mais est parfois supprimée si l on demande de respecter strictement le standard. Programmation Orientée Système Langage C 21 / 54 Programmation Orientée Système Langage C 22 / 54 conditionnelle : Exemples Autre exemple : #ifdef DEBUG printf("ici nous avons i=%d\n", i); Si le programme contient #define DEBUG, ou est compilé avec l option -DDEBUG (strictement équivalent), alors le printf sera exécuté. Sinon, c est rigoureusement comme si la ligne n existait pas. Troisième exemple : #ifdef DEBUG #define affiche(fmt, var) \ printf("ici, " #var "=" fmt "\n", var) #else #define affiche(fmt, var) Approche modulaire Jusqu à maintenant vos programmes étaient écrits en une seule fois, dans un seul fichier. Cette approche n est pas réaliste pour des programmes plus conséquents, qui nécessitent partage de composants, maintenance, réutilisation, On préfère une approche modulaire c est-à-dire une approche qui décompose la tâche à résoudre en sous-tâches implémentées sous la forme de modules génériques (qui pourront être réutilisés dans d autres contextes). Chaque module correspond alors à une tâche ponctuelle, à un ensemble cohérent de données, à un concept de base, etc. Programmation Orientée Système Langage C 23 / 54 Programmation Orientée Système Langage C 24 / 54

7 Utilité Pourquoi faire cela? Pour rendre réutilisable : éviter de réinventer la roue à chaque fois La conception d un programme doit tenir compte de deux aspects importants : la réutilisation des objets/fonctions existants : bibliothèques logicielles («libraries» en anglais) ; (les autres/passé nous/présent) la réutilisabilité des objets/fonctions nouvellement créés. (nous/présent les autres/futur) Pour maintenir plus facilement : pas besoin de tout recompiler le jour où on corrige une erreur dans une (sous--sous-)fonction Pour pouvoir développer des programmes indépendamment, c est-à-dire même si le code source n est pas disponible Distribuer des bibliothèques logicielles (morceaux de code) sans en donner les codes sources (protection intellectuelle). Remarque : vous pouvez vous-même créer vos propres bibliothèques. Conception modulaire Concrètement, cela signifie que les types, structures de données et fonctions correspondant à un «concept de base» seront regroupés dans un fichier qui leur est propre. Par exemple, on définira la structure qcm et ses fonctions dans un fichier, à part de son utilisation. séparation des déclarations des objets de leur utilisation effective (dans un ). Concrètement, cela crée donc plusieurs fichiers séparés qu il faudra regrouper («lier») en un tout pour faire un programme. Programmation Orientée Système Langage C 25 / 54 Programmation Orientée Système Langage C 26 / 54 Exemple typedef struct qcm; Différents fichiers void affiche(qcm const * question); int poser_question(qcm const * question); void affiche(qcm const * question) int poser_question(qcm const * question) int demander_nombre(int min, int max); int demander_nombre(int a, int b) La partie déclaration est la partie visible du module que l on écrit, qui va permettre son utilisation (et donc sa réutilisation). Elle est utile aux autres fichiers sources pour pouvoir y utiliser les objets déclarés. fichiers de déclaration (fichiers «headers», avec une extension.h). Ils sont inclus en début de code source via la commande #include Ils servent à la compilation des codes source en code objet. La partie définition est l implémentation du code correspondant et n est pas directement nécessaire pour l utilisateur du module. Elle peut être cachée. fichiers de définitions (codes sources, avec une extension.c) int main(void) qcm maquestion; poser_question(maquestion); Ce sont ces fichiers que l on compile pour créer du code machine (fichiers objets). Les fichiers objets sont regroupés lors de l édition de liens qui prépare l exécutable final. Programmation Orientée Système Langage C 27 / 54 Programmation Orientée Système Langage C 28 / 54

8 typedef : struct exemple qcm; void affiche(qcm const * question); int poser_question(qcm const * question); void affiche(qcm const * question) int poser_question(qcm const * question) La séparation des parties déclaration et définition en deux fichiers permet une compilation du programme complet : phase 1 (compilation) : production de fichiers binaires (appelés fichiers objets) correspondant à la compilation des fichiers sources (.c) contenant les parties définitions ; phase 2 (édition de liens) : production du fichier exécutable final à partir des fichiers objets et des éventuelles bibliothèques. #include "qcm.h" void affiche(qcm const * question) int poser_question(qcm const * question) qcm.c typedef struct qcm; void affiche(qcm const * question); int poser_question(qcm const * question); qcm.h Programmation Orientée Système Langage C 29 / 54 Note : pour un programme en N parties (.c), il y a N phases de compilation et 1 seule phase d édition de liens. Programmation Orientée Système Langage C 30 / 54 d un programme C compilateur fichier source commande : gcc hello.c -o hello fichier exécutable d un programme C fichier source1 fichier source2 gcc -c qcm.c -o qcm.o compilateur fichier objet1 fichier objet2 hello.c gcc -c questionnaire.c -o questionnaire.o #include <stdio.h> int main(void) printf("hello World!\n"); return 0; hello En fait, gcc appelle ici l éditeur de lien ld gcc questionnaire.o qcm.o -o questionnaire édition de liens fichier exécutable Programmation Orientée Système Langage C 31 / 54 Programmation Orientée Système Langage C 32 / 54

9 Rôle de l édition de liens Rôle de l édition de liens (2) Les différentes composantes d un programme ayant été compilées séparément, le code compilé (ou «code objet») contient des références à des bouts de codes non connus au moment la compilation. (c est aussi vrai pour un programme contenu dans un seul fichier : il utilise toujours des bibliothèques du systèmes [ne serait-ce que la libc!] qui ont été compilées [bien] avant lui!) Un code objet, c est en fait du code partiel + des tables d adressage Il contient trois types de tables : table d exportation des objets globaux (variables ou fonctions) ; table d importation des objets référencés mais d adresse inconnue ; Le rôle de l édition de liens («linker») est précisément de construire ces liens entre bouts de codes compilés séparément : résoudre les ambiguïtés d appel table des tâches : liste des endroits dans le code où se trouvent les adresses à résoudre. Programmation Orientée Système Langage C 33 / 54 Programmation Orientée Système Langage C 34 / 54 Rôle du chargeur Mais même l édition de liens ne peut pas tout résoudre Au moment de son «chargement» (loading) pour exécution par le système d exploitation, restent encore dans le programme certains détails d adresses locales à régler. C est précisément le rôle du chargeur («loader») Le chargeur est un module du système d exploitation dont le rôle est de résoudre les dernières ambiguïtés liées au placement effectif en mémoire du programme exécutable avant de lancer son exécution proprement dite. En pratique, contrairement au compilateur et à l éditeur de liens, vous ne voyez pas explicitement ce module. Linker/Loader : exemple Reprenons notre exemple de QCM. Lors de la compilation du programme principal questionnaire.c, le compilateur ne connaît pas l adresse mémoire du code correspondant aux fonctions déclarées dans qcm.h le compilateur laisse cette partie du travail (résoudre les adresses inconnues) au linker Tables d exportation : dans qcm.o : «code» ou «variable» nom type adresse affiche code 0 en relatif poser_question code 342 en relatif (adresse de la première instruction de cette fonction par rapport à tout le code de ce module) dans questionnaire.o : nom type adresse main code 0 en relatif Programmation Orientée Système Langage C 35 / 54 Programmation Orientée Système Langage C 36 / 54

10 Linker/Loader : exemple (suite) Table d importation : qcm.c n en a pas (tous les objets qui y sont référencés sont connus) pour questionnaire.c : affiche, poser_question, et peut être aussi sqrt (ou autres fonctions de librairies système) Table des tâches : pour qcm.c : tous les sauts en mémoire (par exemple dus à des structures de contrôle). pour questionnaire.c : idem qcm.c plus tous les endroits où un appel à du code importé existe. Dans ce cas, les valeurs à résoudre sont exprimées en termes d entrées dans la table d importation, lesquelles seront résolues lors de l édition de lien par consultation des tables d exportation des autres codes objets. Pour finir, le chargeur modifie toutes les adresses de saut en fonction de l adresse de chargement du programme (point d entrée) (on dit que le chargeur «translate» le code) conditionnelle Exemple utile pour la compilation En toute rigueur (même si c est, en fait, redondant pour les fonctions), les fonctions prototypées dans un module mais non définies dans ce module (c est-à-dire nécessitant une édition de lien) doivent se déclarer, dans ces modules (mais pas dans le module qui les définit), comme extern Par exemple dans le qcm.h précédent, qui est prévu pour être inclus dans le fichier principal questionnaire.c, on devrait avoir extern void affiche MAIS ce fichier qcm.h contient aussi la définition de la structure qcm. Et donc pour cela (et éviter la duplication de code) on aimerait bien l inclure aussi dans qcm.c mais alors il ne faudrait pas que les prototypes des fonctions aient le mot extern Comment faire sans duplication de code? compilation conditionnelle Programmation Orientée Système Langage C 37 / 54 Programmation Orientée Système Langage C 38 / 54 conditionnelle et compilation (2) Supposons que l on ait un identificateur unique du fichier qcm.c (disons QMC_C), on peut alors écrire #ifndef QCM_C extern int poser_question( Complément sur les headers files Un même fichier.h pourrait se trouver inclus plusieurs fois dans la compilation via d autre fichier.h. Pour éviter des redéfinition multiples et garantir que le contenu d un fichier.h n est présent qu une seule fois dans une compilation donnée, on utilise le truc suivant définition d un identificateur «unique» au début du fichier Par convention c est souvent le nom du projet suivit du nom du fichier en majuscules avec des _ à la place des caractères non alphanumériques. inclusion conditionnelle du fichier (y compris la définition ci-dessus) Cela donne : #ifndef MONFICHIERAMOI_H #define MONFICHIERAMOI_H // le fichier comme d'habitude Programmation Orientée Système Langage C 39 / 54 Programmation Orientée Système Langage C 40 / 54

11 Complément sur les headers files (2) Les modules écrits en C peuvent également être utilisés en C++ Mais le C++ requiert que de telles fonctions soient déclarées en extern "C" Pour faire un fichier d en-tête C portable en C++, on utilisera donc une nouvelle fois la compilation conditionnelle comme suit : #ifdef cplusplus extern "C" Complément sur les headers files (résumé) Pour résumer, voici à quoi ressemble un fichier d en-tête «bien» écrit (il manque cependant encore de commentaires!) : #ifndef QCM_H #define QCM_H #ifdef cplusplus extern "C" #ifndef QCM_C #define extern_ extern #else #define extern_ // le fichier comme d'habitude typedef struct qcm; #ifdef cplusplus extern_ void affiche(qcm const * question); // #ifdef cplusplus Programmation Orientée Système Langage C 41 / 54 Programmation Orientée Système Langage C 42 / 54 Makefile (introduction) Mais quand on a un grand nombre de modules, cela devient vite fastidieux de faire toutes ces compilations et ces liens Makefile (bases) Un Makefile a une structure très simple : il est constitué d un ensemble de règles décrivant les différents modules à faire et de quoi ils dépendent («liste de dépendances»). Une règle s écrit : but: liste de dépendances pour cela il y a des moyens plus pratiques dont les Makefile Un Makefile est un fichier qui permet de construire facilement un projet en indiquant les composants et leurs dépendances. Une fois un Makefile constitué, pour réaliser l exécutable correspondant au projet il suffit de taper simplement make. Exemple : questionnaire: questionnaire.o qcm.o La règle spécifique all permet de donner la liste des «buts ultimes» que l on veut créer : all: questionnaire ou alors pour construire un programme particulier cible : make cible. Si on a des librairies système à utiliser, il faut les ajouter dans la variable LDLIBS au début du Makefile : LDLIBS = -lm Programmation Orientée Système Langage C 43 / 54 Programmation Orientée Système Langage C 44 / 54

12 Makefile (exemple simple) Exemple (simple) complet : LDLIBS = -lm all: questionnaire questionnaire: questionnaire.o qcm.o Makefile (suite) On n est pas obligé d utiliser les règles implicites de compilation, mais on peut, au cas par cas, spécifier exactement la/les commandes que l on souhaite exécuter pour passer des dépendances au but. Cela se fait de la façon suivante but: liste de dépendances <TAB>commande où <TAB> représente une tabulation (j insiste : pas 4 ou 8 espaces, mais 1 seul caractère <TAB>!) Remarques : 1. il n est pas nécessaire de mettre les règles simples indiquant la dépendance entre le.c et le.o correspondant (comme par exemple questionnaire.o: questionnaire.c) Ce sont des règles implicites. 2. si on veut ajouter des options au compilateur, on peut le faire avec la variable CFLAGS : CFLAGS = -ansi -g Programmation Orientée Système Langage C 45 / 54 Exemple : questionnaire: questionnaire.o qcm.o <TAB>gcc -o questionnaire questionnaire.o qcm.o On peut définir plusieurs commandes à la suite pour une même cible. Il suffit de les mettre chacune à la ligne précédée d un <TAB> Elles sont alors exécutées par make les unes après les autres (nouveau shell à chaque fois) Programmation Orientée Système Langage C 46 / 54 Makefile : variables prédéfinies Afin de faciliter l écriture des commandes dans un Makefile, un certain nombre de variables sont prédéfinies Exemples : $@ le but $? les dépendances qui ne sont plus à jour $< dépendances telles que définies par les règles par défaut $^ [GNU make] liste des dépendances $(CC) le nom du compilateur (C) $(CFLAGS) options de compilation $(LDFLAGS) options du linker $(LDLIBS) bibliothèques à ajouter Makefile : variables prédéfinies (2) Exemple de règles par défaut exprimées avec les variables prédéfinies : compilation.c.o : $(CC) -c $(CPPFLAGS) $(CFLAGS) $< édition de liens : $(CC) -o $@ $(LDFLAGS) $ˆ $(LDLIBS) Pour plus de détails : questionnaire.o: questionnaire.c qmc.h <TAB>gcc -o $@ $< Programmation Orientée Système Langage C 47 / 54 Programmation Orientée Système Langage C 48 / 54

13 Makefile : variables Makefile : divers (1/2) On peut également définir ses propres variables La déclaration se fait simplement avec le nom de la variable suivit de = On peut mettre des commentaires dans un Makefile Tout ce qui suit derrière un # jusqu à la fin de la ligne est considéré comme un commentaire Exemple : RUBS = *.o *~ *.bak Pour utiliser la valeur d une variable on entoure son nom de $( ) Exemple : rm $(RUBS) Si l on fait précéder la commande donnée dans une règle la commande n est pas répétée à l écran lors de l exécution de make (i.e. no echo) Si l on fait précéder la commande donnée dans une règle par -, make continue l exécution même en cas d échec de cette commande Les variables peuvent être redéfinies lors de l appel : make LDLIBS=-lm monprog redéfinit la variable LDLIBS On peut générer automatiquement la liste de toutes les dépendances en utilisant l option -MM de gcc : gcc -MM *.c (on peut aussi utiliser la commande makedepend -Y *.c) Programmation Orientée Système Langage C 49 / 54 Programmation Orientée Système Langage C 50 / 54 Makefile : divers (2/2) Il existe plusieurs outils pour générer automatiquement les en fonction de la configuration de la machine. Voir par exemple : CMake, SCons, Jam (BJam, KJam, ) Makefile : exemple # Makefile pour le projet BIDULEMACHIN # cree par C. J. Reileppach le 11/03/2018 CC = gcc CFLAGS = -ansi -g -Wall LDFLAGS = LDLIBS = -lm RM = /bin/rm -f TARGETS = bidulemachin OBJS = *.o RUBS = $(OBJS) *~ core \#*\# the GNU Build Tools, alias «autotools» (automake, autoconf and libtool), cf les outils intégrés de développement de projets (IDE) : Code : :Blocks, KDevelop, Anjuta, NetBeans, Eclipse, all: All done. clean: -@$(RM) Cleaned. new: clean -@$(RM) $(TARGETS) $(MAKE) all Programmation Orientée Système Langage C 51 / 54 Programmation Orientée Système Langage C 52 / 54

14 C : divers Prototype le plus général de main : int main(int argc, char *argv[]) argc : nombre d arguments, taille du tableau argv argv : tableau de pointeur sur des caractères : tableau des arguments. argv[0] est le nom du programme Précompilation : #define alias ( arguments ) sequence a reecrire où la portion ( arguments ) est optionnelle #if expression ou #ifdef identificateur ou #ifndef identificateur puis #elif ou #else, optionnels, et le tout terminé par. Compulation modulaire séparation des prototypes (dans les fichier.h) des définitions (dans les fichiers.c) compilation 1. Inclusion des prototypes nécessaires dans le code : #include "header.h" 2. vers un fichier "objet" (.o) : gcc -c prog.c 3. Lien entre plusieurs objets : gcc prog1.o prog2.o prog3.o -o monprog Makefile : moyen utile pour décrire les dépendances entre modules d un projet (et compiler automatiquement le projet) Syntaxe : cible: dependance <TAB>commande Programmation Orientée Système Langage C 53 / 54 Programmation Orientée Système Langage C 54 / 54

Quelques éléments de compilation en C et makefiles

Quelques éléments de compilation en C et makefiles Quelques éléments de compilation en C et makefiles Guillaume Feuillade 1 Compiler un programme C Le principe de la compilation consiste à passer d un ensemble de fichiers de code à un programme exécutable

Plus en détail

Cours Langage C/C++ Programmation modulaire

Cours Langage C/C++ Programmation modulaire Cours Langage C/C++ Programmation modulaire Thierry Vaira BTS IRIS Avignon tvaira@free.fr «v0.1 Rappel Programmation modulaire (1/2) Le découpage d'un programme en sous-programmes est appelée programmation

Plus en détail

Le prototype de la fonction main()

Le prototype de la fonction main() Le prototype de la fonction main() 1. Introduction...1 2. Paramètres et type de retour de la fonction main()...1 3. Exemple 1...2 4. La fonction exit() du C...2 5. Détecter le code de retour d un programme

Plus en détail

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

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation impérative et structures de données simples Introduction au langage C Sandrine Blazy - 1ère année 24 octobre 2007 Cours d Algorithmique-Programmation

Plus en détail

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par

Plus en détail

Introduction au langage C

Introduction au langage C Introduction au langage C Cours 1: Opérations de base et premier programme Alexis Lechervy Alexis Lechervy (UNICAEN) Introduction au langage C 1 / 23 Les premiers pas Sommaire 1 Les premiers pas 2 Les

Plus en détail

Algorithmique et Programmation, IMA

Algorithmique et Programmation, IMA Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions

Plus en détail

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

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu. Seance 2: Complétion du code de jeu. (durée max: 2h) Mot clé const et pointeurs: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu. Implémentez jeu_recupere_piece

Plus en détail

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

UE Programmation Impérative Licence 2ème Année 2014 2015 UE Programmation Impérative Licence 2 ème Année 2014 2015 Informations pratiques Équipe Pédagogique Florence Cloppet Neilze Dorta Nicolas Loménie prenom.nom@mi.parisdescartes.fr 2 Programmation Impérative

Plus en détail

Programmation système I Les entrées/sorties

Programmation système I Les entrées/sorties Programmation système I Les entrées/sorties DUT 1 re année Université de Marne La vallée Les entrées-sorties : E/O Entrées/Sorties : Opérations d échanges d informations dans un système informatique. Les

Plus en détail

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

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie Chapitre I : Les bases du C++ Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie du logiciel, et ce depuis

Plus en détail

Les structures. Chapitre 3

Les structures. Chapitre 3 Chapitre 3 Les structures Nous continuons notre étude des structures de données qui sont prédéfinies dans la plupart des langages informatiques. La structure de tableau permet de regrouper un certain nombre

Plus en détail

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C IN 102 - Cours 1 Qu on le veuille ou non, les systèmes informatisés sont désormais omniprésents. Même si ne vous destinez pas à l informatique, vous avez de très grandes chances d y être confrontés en

Plus en détail

Programmation système de commandes en C

Programmation système de commandes en C Programmation système de commandes en C Cours de Programmation système Tuyêt Trâm DANG NGOC Université de Cergy-Pontoise 2012 2013 Tuyêt Trâm DANG NGOC Programmation système de commandes

Plus en détail

Programmation C. Apprendre à développer des programmes simples dans le langage C

Programmation C. Apprendre à développer des programmes simples dans le langage C Programmation C Apprendre à développer des programmes simples dans le langage C Notes de cours sont disponibles sur http://astro.u-strasbg.fr/scyon/stusm (attention les majuscules sont importantes) Modalités

Plus en détail

Licence ST Université Claude Bernard Lyon I LIF1 : Algorithmique et Programmation C Bases du langage C 1 Conclusion de la dernière fois Introduction de l algorithmique générale pour permettre de traiter

Plus en détail

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51 DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51 PLAN DU COURS Introduction au langage C Notions de compilation Variables, types, constantes, tableaux, opérateurs Entrées sorties de base Structures de

Plus en détail

Conventions d écriture et outils de mise au point

Conventions d écriture et outils de mise au point Logiciel de base Première année par alternance Responsable : Christophe Rippert Christophe.Rippert@Grenoble-INP.fr Introduction Conventions d écriture et outils de mise au point On va utiliser dans cette

Plus en détail

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

Bases de programmation. Cours 5. Structurer les données Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et

Plus en détail

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

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3. 1. Structure d un programme C Un programme est un ensemble de fonctions. La fonction "main" constitue le point d entrée pour l exécution. Un exemple simple : #include int main() { printf ( this

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr . Cours intensif Java 1er cours: de C à Java Septembre 2009 Enrica DUCHI LIAFA, Paris 7 Enrica.Duchi@liafa.jussieu.fr LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le

Plus en détail

3IS - Système d'exploitation linux - Programmation système

3IS - Système d'exploitation linux - Programmation système 3IS - Système d'exploitation linux - Programmation système 2010 David Picard Contributions de : Arnaud Revel, Mickaël Maillard picard@ensea.fr Environnement Les programmes peuvent être exécutés dans des

Plus en détail

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

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr Table des matières 1 Les bases 3 2 Variables et constantes 5 3 Quelques fonctions indispensables

Plus en détail

Le langage C. Séance n 4

Le langage C. Séance n 4 Université Paris-Sud 11 Institut de Formation des Ingénieurs Remise à niveau INFORMATIQUE Année 2007-2008 Travaux pratiques d informatique Le langage C Séance n 4 But : Vous devez maîtriser à la fin de

Plus en détail

Chap III : Les tableaux

Chap III : Les tableaux Chap III : Les tableaux Dans cette partie, on va étudier quelques structures de données de base tels que : Les tableaux (vecteur et matrice) Les chaînes de caractères LA STRUCTURE DE TABLEAU Introduction

Plus en détail

Programmation en langage C

Programmation en langage C Programmation en langage C Anne CANTEAUT INRIA - projet CODES B.P. 105 78153 Le Chesnay Cedex Anne.Canteaut@inria.fr http://www-rocq.inria.fr/codes/anne.canteaut/cours C 2 Table des matières 3 Table des

Plus en détail

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles) 1/4 Objectif de ce cours /4 Objectifs de ce cours Introduction au langage C - Cours Girardot/Roelens Septembre 013 Du problème au programme I passer d un problème exprimé en français à la réalisation d

Plus en détail

Optimisation de logiciels de modélisation sur centre de calcul

Optimisation de logiciels de modélisation sur centre de calcul Optimisation de logiciels de modélisation sur centre de calcul Gérald Monard Pôle de Chimie Théorique http://www.monard.info/ Introduction Les ordinateurs sont des appareils électroniques permettant d

Plus en détail

Programmation système en C/C++

Programmation système en C/C++ Programmation système en C/C++ Jean-Baptiste Vioix (jb.vioix@free.fr) LE2I - ENESAD http://jb.vioix.free.fr 1-41 Programmation en C/C++ sous Unix Il existe des très nombreux outils de développement sous

Plus en détail

TP1. Outils Java Eléments de correction

TP1. Outils Java Eléments de correction c sep. 2008, v2.1 Java TP1. Outils Java Eléments de correction Sébastien Jean Le but de ce TP, sur une séance, est de se familiariser avec les outils de développement et de documentation Java fournis par

Plus en détail

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr Mars 2002 Pour Irène et Marie Legal Notice Copyright c 2002 Patrick Cégielski Université

Plus en détail

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

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier Cours de C Petits secrets du C & programmation avancée Sébastien Paumier paumier@univ-mlv.fr Illustrations provenant du site http://tux.crystalxp.net/ 1 Affectations étendues a+=expression a=a+expression

Plus en détail

Mon premier rpm. http://alexandre-mesle.com 7 juin 2010. 1 Avant de commencer 2 1.1 RPM... 2 1.2 URPMI... 2 1.3 RPMBUILD... 2

Mon premier rpm. http://alexandre-mesle.com 7 juin 2010. 1 Avant de commencer 2 1.1 RPM... 2 1.2 URPMI... 2 1.3 RPMBUILD... 2 Mon premier rpm http://alexandre-mesle.com 7 juin 2010 Table des matières 1 Avant de commencer 2 1.1 RPM....................................................... 2 1.2 URPMI.....................................................

Plus en détail

Le langage C. Introduction, guide de reference

Le langage C. Introduction, guide de reference Le langage C Introduction, guide de reference Ce document est une présentation du langage de programmation C, de sa syntaxe et de ses spécificités. Il est destiné essentiellement à servir de mémo-guide

Plus en détail

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

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon 13 janvier 2015 2 Table des matières Organisation générale du cours 7 1 Notions générales d algorithmique et de programmation

Plus en détail

Algorithmique et programmation : les bases (VBA) Corrigé

Algorithmique et programmation : les bases (VBA) Corrigé PAD INPT ALGORITHMIQUE ET PROGRAMMATION 1 Cours VBA, Semaine 1 mai juin 2006 Corrigé Résumé Ce document décrit l écriture dans le langage VBA des éléments vus en algorithmique. Table des matières 1 Pourquoi

Plus en détail

Cours Programmation Système

Cours Programmation Système Cours Programmation Système Filière SMI Semestre S6 El Mostafa DAOUDI Département de Mathématiques et d Informatique, Faculté des Sciences Université Mohammed Premier Oujda m.daoudi@fso.ump.ma Février

Plus en détail

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

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs Brefs rappels sur la pile et le tas (Stack / Heap) et les pointeurs (exemples en C) v1.11 - Olivier Carles 1 Pile et Tas Mémoire allouée de manière statique Mémoire Allouée Dynamiquement variables locales

Plus en détail

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

Cours d initiation à la programmation en C++ Johann Cuenin Cours d initiation à la programmation en C++ Johann Cuenin 11 octobre 2014 2 Table des matières 1 Introduction 5 2 Bases de la programmation en C++ 7 3 Les types composés 9 3.1 Les tableaux.............................

Plus en détail

Cours d Algorithmique et de Langage C 2005 - v 3.0

Cours d Algorithmique et de Langage C 2005 - v 3.0 Cours d Algorithmique et de Langage C 2005 - v 3.0 Bob CORDEAU cordeau@onera.fr Mesures Physiques IUT d Orsay 15 mai 2006 Avant-propos Avant-propos Ce cours en libre accès repose sur trois partis pris

Plus en détail

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

Programmation en C. École Nationale Supérieure de Techniques Avancées. Pierre-Alain Fouque et David Pointcheval École Nationale Supérieure de Techniques Avancées Programmation en C Pierre-Alain Fouque et David Pointcheval E-mail : Pierre-Alain.Fouque@ens.fr Web : http://www.di.ens.fr/~fouque/ Table des matières

Plus en détail

Utilisation d objets : String et ArrayList

Utilisation d objets : String et ArrayList Chapitre 6 Utilisation d objets : String et ArrayList Dans ce chapitre, nous allons aborder l utilisation d objets de deux classes prédéfinies de Java d usage très courant. La première, nous l utilisons

Plus en détail

Chaîne de production d un programme

Chaîne de production d un programme 227 Plan 1. Généralités : compilateur, assembleur, éditeur de liens compilation séparée directives #include, espace d adressage d un programme 2. l'outil make cible, dépendance fichier Makefile de base

Plus en détail

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

Introduction à l algorithmique et à la programmation M1102 CM n 3 Introduction à l algorithmique et à la programmation M1102 CM n 3 DUT Informatique 1 re année Eric REMY eric.remy@univ-amu.fr IUT d Aix-Marseille, site d Arles Version du 2 octobre 2013 E. Remy (IUT d

Plus en détail

Rappels Entrées -Sorties

Rappels Entrées -Sorties Fonctions printf et scanf Syntaxe: écriture, organisation Comportement Données hétérogènes? Gestion des erreurs des utilisateurs 17/11/2013 Cours du Langage C ibr_guelzim@yahoo.fr ibrahimguelzim.atspace.co.uk

Plus en détail

Compression de Données - Algorithme de Huffman Document de Conception

Compression de Données - Algorithme de Huffman Document de Conception ROLLET Samuel SALLE Jennifer Compression de Données - Algorithme de Huffman Document de Conception Projet d'algorithmique et Structure des Données 1 SOMMAIRE 1. Domaine d application....4 1.1 Objectifs

Plus en détail

I. Introduction aux fonctions : les fonctions standards

I. Introduction aux fonctions : les fonctions standards Chapitre 3 : Les fonctions en C++ I. Introduction aux fonctions : les fonctions standards A. Notion de Fonction Imaginons que dans un programme, vous ayez besoin de calculer une racine carrée. Rappelons

Plus en détail

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

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1 Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1 B. Baert & F. Ludewig Bruno.Baert@ulg.ac.be - F.Ludewig@ulg.ac.be Qu est-ce que la programmation? Programmer Ecrire un

Plus en détail

Arguments d un programme

Arguments d un programme Arguments d un programme L2 SPI, Bruno Jacob 1 Arguments Quand on appelle un programme dans un environnement UNIX ou MS- DOS, on compose une ligne de commandes de la forme : nom-du-programme argument1

Plus en détail

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence Licence Algorithmique & Langage C Paternité - Pas d'utilisation Commerciale Partage des Conditions Initiales à l'identique 2.0 France Vous êtes libres : * de reproduire, distribuer et communiquer cette

Plus en détail

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

Programmation C. J.-F. Lalande. 15 novembre 2012 Programmation C J.-F. Lalande novembre 0 Ce cours est mis à disposition par Jean-François Lalande selon les termes de la licence Creative Commons Attribution - Pas d Utilisation Commerciale - Partage à

Plus en détail

TP : Gestion d une image au format PGM

TP : Gestion d une image au format PGM TP : Gestion d une image au format PGM Objectif : L objectif du sujet est de créer une classe de manipulation d images au format PGM (Portable GreyMap), et de programmer des opérations relativement simples

Plus en détail

Langage Éric Guérin 5 octobre 2010

Langage Éric Guérin 5 octobre 2010 Langage Éric Guérin 5 octobre 2010 Langage C TABLE DES MATIÈRES Table des matières 1 Introduction 7 1.1 Historique........................................... 7 1.2 Architecture matérielle....................................

Plus en détail

STAGE IREM 0- Premiers pas en Python

STAGE IREM 0- Premiers pas en Python Université de Bordeaux 16-18 Février 2014/2015 STAGE IREM 0- Premiers pas en Python IREM de Bordeaux Affectation et expressions Le langage python permet tout d abord de faire des calculs. On peut évaluer

Plus en détail

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Pierre Boudes 28 septembre 2011 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike

Plus en détail

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

Cours de C/C++ par la pratique. Hugues Talbot Cours de C/C++ par la pratique Hugues Talbot 24 octobre 2008 2 Table des matières 1 Comment démarrer? 7 1.1 Un programme simple en C pur.......................... 7 1.2 Un programme en C ++...............................

Plus en détail

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

Langage C. Patrick Corde. Patrick.Corde@idris.fr. 22 juin 2015. Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin 2015 1 / 289 Langage C Patrick Corde Patrick.Corde@idris.fr 22 juin 2015 Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin 2015 1 / 289 Table des matières I 1 Présentation du langage C Historique Intérêts

Plus en détail

Outils pour la pratique

Outils pour la pratique Cinquième partie Outils pour la pratique 121 CHAPITRE 1 Les bases des séances de TP Avant de lire cettre section, il est suggéré de relire vos notes de cours se rapportant au système d exploitation Unix.

Plus en détail

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année 2003-2004 Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES Maude Manouvrier La reproduction de ce document par

Plus en détail

Support de Cours de Langage C. Christian Bac

Support de Cours de Langage C. Christian Bac Support de Cours de Langage C Christian Bac 15 février 2013 ii Table des matières Avant-propos xi 1 Historique et présentation 1 1.1 Historique........................................... 1 1.2 Présentation

Plus en détail

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

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java Langages objets Introduction M2 Pro CCI, Informatique Emmanuel Waller, LRI, Orsay présentation du module logistique 12 blocs de 4h + 1 bloc 2h = 50h 1h15 cours, 45mn exercices table, 2h TD machine page

Plus en détail

L informatique en BCPST

L informatique en BCPST L informatique en BCPST Présentation générale Sylvain Pelletier Septembre 2014 Sylvain Pelletier L informatique en BCPST Septembre 2014 1 / 20 Informatique, algorithmique, programmation Utiliser la rapidité

Plus en détail

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

Initiation. àl algorithmique et à la programmation. en C Initiation àl algorithmique et à la programmation en C Initiation àl algorithmique et à la programmation en C Cours avec 129 exercices corrigés Illustration de couverture : alwyncooper - istock.com Dunod,

Plus en détail

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Cours d introduction à l informatique Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Qu est-ce qu un Une recette de cuisine algorithme? Protocole expérimental

Plus en détail

Les chaînes de caractères

Les chaînes de caractères Les chaînes de caractères Dans un programme informatique, les chaînes de caractères servent à stocker les informations non numériques comme par exemple une liste de nom de personne ou des adresses. Il

Plus en détail

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE QCM Remarque : - A une question correspond au moins 1 réponse juste - Cocher la ou les bonnes réponses Barème : - Une bonne réponse = +1 - Pas de réponse = 0

Plus en détail

Systeme d'exploitation

Systeme d'exploitation Introduction au dévellopement de Methodes Natives Partie I : appelle de methodes C++ sous windows Auteur: Frank Sauvage. 1 \ introduction aux methodes natives : Les methodes natives sont des methodes devellopées

Plus en détail

Langages et Concepts de Programmation Introduction à la programmation en langage C

Langages et Concepts de Programmation Introduction à la programmation en langage C Langages et Concepts de Programmation Introduction à la programmation en langage C Cours 1A 2013-2014 Jean-Jacques Girardot, Marc Roelens girardot@emse.fr, roelens@emse.fr Septembre 2013 École Nationale

Plus en détail

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation Université de Savoie Module ETRS711 Travaux pratiques Compression en codage de Huffman 1. Organisation du projet 1.1. Objectifs Le but de ce projet est d'écrire un programme permettant de compresser des

Plus en détail

OS Réseaux et Programmation Système - C5

OS Réseaux et Programmation Système - C5 OS Réseaux et Programmation Système - C5 Rabie Ben Atitallah rabie.benatitallah@univ-valenciennes.fr RPC - XDR Rappel RPC: Remote Procedure Call Besoin d un environnement de haut niveau pour le développement

Plus en détail

Structure d un programme

Structure d un programme Architecture des ordinateurs Cours 6 Structure d un programme 3 décembre 2012 Archi 1/30 Programme en Assembleur Archi 2/30 Sections de données programme en assembleur = fichier texte (extension.asm) organisé

Plus en détail

Notes de Cours - Programmation 1 2011-2012. Pascal Ferraro

Notes de Cours - Programmation 1 2011-2012. Pascal Ferraro Notes de Cours - Programmation 1 2011-2012 Pascal Ferraro 18 septembre 2011 2 Table des matières 1 Introduction à la programmation en Langage C 9 1.1 Quelques Références.................................

Plus en détail

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

Structure d un programme et Compilation Notions de classe et d objet Syntaxe Cours1 Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Programmation Orientée Objet Un ensemble d objet qui communiquent Pourquoi POO Conception abstraction sur les types

Plus en détail

Construction de logiciel et packaging

Construction de logiciel et packaging Construction de logiciel et packaging Matthieu Herrb Ecole IDL2011, La Londes Les Maures, 5 au 9 décembre 2011 http://homepages.laas.fr/matthieu/idl2011/ Licence Ce document est sous licence Creative Commons

Plus en détail

TP 1. Prise en main du langage Python

TP 1. Prise en main du langage Python TP. Prise en main du langage Python Cette année nous travaillerons avec le langage Python version 3. ; nous utiliserons l environnement de développement IDLE. Étape 0. Dans votre espace personnel, créer

Plus en détail

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

Cours de programmation avancée. Le langage C. Université du Luxembourg 2005 2006 Université du Luxembourg 2005 2006 Cours de programmation avancée. Le langage C Sébastien Varrette Version : 0.4 Nicolas Bernard 2 Table des matières

Plus en détail

Cours 6 : Tubes anonymes et nommés

Cours 6 : Tubes anonymes et nommés Cours 6 : Tubes anonymes et nommés Mécanisme de communications du système de fichiers I-node associé. Type de fichier: S_IFIFO. Accès au travers des primitives read et write. Les tubes sont unidirectionnels

Plus en détail

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

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

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

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la

Plus en détail

Java Licence Professionnelle CISII, 2009-10

Java Licence Professionnelle CISII, 2009-10 Java Licence Professionnelle CISII, 2009-10 Cours 4 : Programmation structurée (c) http://www.loria.fr/~tabbone/cours.html 1 Principe - Les méthodes sont structurées en blocs par les structures de la programmation

Plus en détail

SUPPORT DE COURS. Langage C

SUPPORT DE COURS. Langage C Dpt Informatique 2010-2011 SUPPORT DE COURS Langage C Semestre 1 par : «CaDePe» Marie-Françoise Canut Marianne de Michiel André Péninou Table des Matières 1 Généralités...8 1.1 Introduction aux langages

Plus en détail

INFO-F-404 : Techniques avancées de systèmes d exploitation

INFO-F-404 : Techniques avancées de systèmes d exploitation Nikita Veshchikov e-mail : nikita.veshchikov@ulb.ac.be téléphone : 02/650.58.56 bureau : 2N8.213 URL : http://student.ulb.ac.be/~nveshchi/ INFO-F-404 : Techniques avancées de systèmes d exploitation Table

Plus en détail

Notions fondamentales du langage C# Version 1.0

Notions fondamentales du langage C# Version 1.0 Notions fondamentales du langage C# Version 1.0 Z 2 [Notions fondamentales du langage Csharp] [Date : 25/03/09] Sommaire 1 Tout ce qu il faut savoir pour bien commencer... 3 1.1 Qu est ce qu un langage

Plus en détail

INITIATION A LA PROGRAMMATION

INITIATION A LA PROGRAMMATION 2004-2005 Université Paris Dauphine IUP Génie Mathématique et Informatique INITIATION A LA PROGRAMMATION PROCEDURALE, A L'ALGORITHMIQUE ET AUX STRUCTURES DE DONNEES PAR LE LANGAGE C Maude Manouvrier La

Plus en détail

Chapitre 10 : Logiciels

Chapitre 10 : Logiciels Chapitre 10 : Logiciels Installation de logiciels dans Linux IUT Lannion - Systèmes - 1e année - Nerzic - 2014-15 1 10.1 Installation manuelle Cette partie explique comment on compile et installe un logiciel

Plus en détail

Environnements de développement (intégrés)

Environnements de développement (intégrés) Environnements de développement (intégrés) Introduction aux EDI, la plateforme Eclipse Patrick Labatut labatut@di.ens.fr http://www.di.ens.fr/~labatut/ Département d informatique École normale supérieure

Plus en détail

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

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte Projet d informatique M1BI : Compression et décompression de texte Le but de ce projet est de coder un programme réalisant de la compression et décompression de texte. On se proposera de coder deux algorithmes

Plus en détail

Premiers Pas en Programmation Objet : les Classes et les Objets

Premiers Pas en Programmation Objet : les Classes et les Objets Chapitre 2 Premiers Pas en Programmation Objet : les Classes et les Objets Dans la première partie de ce cours, nous avons appris à manipuler des objets de type simple : entiers, doubles, caractères, booléens.

Plus en détail

I00 Éléments d architecture

I00 Éléments d architecture I00 I Exemples d ordinateur Pour les informaticiens, différentes machines de la vie courante sont des ordinateurs : par exemple les ordinateurs portables, les ordinateurs fixes, mais aussi les supercalculateurs,

Plus en détail

Programmation impérative

Programmation impérative Programmation impérative Cours 4 : Manipulation des fichiers en C Catalin Dima Organisation des fichiers Qqs caractéristiques des fichiers : Nom (+ extension). Chemin d accès absolu = suite des noms des

Plus en détail

Programme awk------introduction rapide

Programme awk------introduction rapide Programme awk------introduction rapide Introduction Historique Le nom de awk vient de ses trois concepteurs : Alfred V. Aho, Peter J. Weinberger et Brian W. Kernighan. La version originale fut créée en

Plus en détail

Les fichiers. Chapitre 4

Les fichiers. Chapitre 4 Chapitre 4 Les fichiers Jusqu à maintenant tous les programmes que nous avons conçus travaillaient sur des données qui étaient perdues après chaque session de travail. On peut cependant, c est bien naturel,

Plus en détail

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

Cours de C++ François Laroussinie. 2 novembre 2005. Dept. d Informatique, ENS de Cachan Cours de C++ François Laroussinie Dept. d Informatique, ENS de Cachan 2 novembre 2005 Première partie I Introduction Introduction Introduction Algorithme et programmation Algorithme: méthode pour résoudre

Plus en détail

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

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS CCS Sommaire Généralités sur le langage. 2 Structure d un programme en C.. 3 Les constantes et équivalences.. 4 Les variables...

Plus en détail

Les structures de données. Rajae El Ouazzani

Les structures de données. Rajae El Ouazzani Les structures de données Rajae El Ouazzani Les arbres 2 1- Définition de l arborescence Une arborescence est une collection de nœuds reliés entre eux par des arcs. La collection peut être vide, cad l

Plus en détail

PROJET ALGORITHMIQUE ET PROGRAMMATION II

PROJET ALGORITHMIQUE ET PROGRAMMATION II PROJET 1 ALGORITHMIQUE ET PROGRAMMATION II CONTENU DU RAPPORT A RENDRE : o Fiche signalétique du binôme o Listing des différents fichiers sources o CD sources o Il sera tenu compte de la présentation du

Plus en détail

Généralités sur le Langage Java et éléments syntaxiques.

Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques....1 Introduction...1 Genéralité sur le langage Java....1 Syntaxe de base du Langage...

Plus en détail

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

UE C avancé cours 1: introduction et révisions Introduction Types Structures de contrôle Exemple UE C avancé cours 1: introduction et révisions Jean-Lou Desbarbieux et Stéphane Doncieux UMPC 2004/2005 Introduction Types Structures de contrôle Exemple

Plus en détail

Introduction à MATLAB R

Introduction à MATLAB R Introduction à MATLAB R Romain Tavenard 10 septembre 2009 MATLAB R est un environnement de calcul numérique propriétaire orienté vers le calcul matriciel. Il se compose d un langage de programmation, d

Plus en détail