Home

Abrégé de programmation en Langage C - LISIC

image

Contents

1. Il est possible de noter les litt raux en hexad cimal base 16 en les pr fixant par Ox ou OX suivi de chiffres dans l ensemble 0 9 ainsi que F en majuscules ou minuscules pour repr senter les chiffres hexad cimaux entre 10 et 15 d cimal Ainsi par exemple 64 d cimal 0100 octal 0X40 hexa 63 d cimal 077 octal 0x3f hexa G n ralement les ordinateurs actuels 2009 utilisent des int cod s sur 32 bits qui peuvent repr senter les valeurs dans l intervalle 2 231 1 Toutefois le C pr voit diff rents types d entiers de capacit plus ou moins grande mais leur implantation d pend du compilateur et de la machine utilis e On garantit seulement que les valeurs d un type plus petit sont incluses au sens large dans un type plus grand char lt short lt int lt long Notez que le type char est consid r comme un type entier en effet les caract res sont stock s en m moire par leur code num rique dans un des standards ASCII ISO UTF selon le syst me utilis et donc C les consid re comme tels Ainsi on peut crire par exemple char c 64 ce qui revient crire A dans la variable c Par la suite l affectation c c 1 remplace le caract re actuel par le suivant dans le code ici B dont le code est 65 Enfin les types entiers peuvent tre pr fix s par le mot cl unsigned ils sont alors consid r s comme non sign s c est dire repr sentant uniquem
2. OK printf s n ch2 ERREUR on n a pas mis de marqueur de fin dans ch2 ch2 2 0 ch2 est maintenant une vraie cha ne printf s n ch2 OK affiche 0B La pr sence du marqueur de fin permet de conna tre la longueur de la cha ne qui peut tre plus petite que celle du tableau qui la contient Exemple de copie de chaine int main copie raisonnable char ch1 10 012345678 char ch2 10 int i 0 while ch1 i 0 ch2 i chl i on incr mente i pour l it ration suivante ch2 i 0 on place la fin de cha ne dans ch2 Comme 0 est aussi interpr t comme le bool en FAUX dans les tests on peut encore compacter l criture en utilisant des pointeurs int main copie raccourcie char ch1 10 012345678 char ch2 10 char xpl chl xp2 ch2 while pl donc tant que xpl 0 xp2 pl on incr mente pour l it ration suivante xp2 0 on place la fin de cha ne dans ch2 Et comme l affectation est vue comme une expression renvoyant la valeur affect e on peut m me condenser en int main copie pour geek char ch1 10 012345678 char ch2 10 char xpl chl xp2 ch2 while x p2 pl donc tant que xpl 0 il n y a plus rien faire ici la copie du marqueur t faite dans la boucle Evidemment l encore ce qui est faisable n est pas pour autant recommand la lisibilit est le c
3. dire qu on doit pr ciser quel est le type d objet dont on manipule l adresse on parle du type de l objet point La d claration d un pointeur utilise l toile m me symbole que la multiplication et est de la forme type_point variable_pointeur Acc der l objet point se dit d pointer et utilise aussi l toile plac e devant la variable pointeur comme indiqu dans les exemples qui suivent int main int a b xp a et b sont des entiers p est un pointeur d entiers int xq c q est un pointeur d entier c est un entier int xxpp pp est un pointeur de pointeur d entier p amp a p contient l adresse de a xp 2 quivaut a 2 xq 2 ERREUR q n est pas initialis il pointe n importe o q p q pointe aussi vers a c xq quivaut c a p amp q ERREUR p est un pointeur sur entier et pas sur pointeur d entier pp amp q OK xxpp 3 a vaut maintenant 3 xpp amp c q pointe sur c amp a pp ERREUR amp q est l adresse de q c est une valeur constante pas une variable pp amp amp a ERREUR amp a est une valeur et n a pas d adresse q amp b q pointe sur b xq xp quivaut b c 2 Tableaux statiques 1 dimension Pr sentation Un tableau est une collection ordonn e d l ments de variables de m me type rassembl s physiquement la suite les uns des
4. s char cha ne f double au format mmm ddd e E double au format m dddddd e E xx g G double p void comme une adresse num rique sort un signe int printf const char format quivalent de fprintf stdout f sort sur la sortie standard cran int sprintf char s const char format comme fprintf mais la sortie est envoy e dans une cha ne Le nombre de caract res hors 0 est retourn int fscanf FILE stream const char format Effectue une lecture avec conversion lisant dans stream selon les indications de format Retourne le nombre d arguments remplis lus ou EOF si fin de fichier ou erreur avant toute conversion Chacun des arguments qui suit le format doit treun pointeur Un format de conversion consiste en des espaces ou tabulations qui seront saut s des caract res ordinaires qui doivent correspondre ceux du flux d entr e et qui seront ignor s viter une sp cification de conversion d but e par le caract re optionnel qui indique de passer le prochain argument une largeur de champ de lecture optionnelle caract re optionnel modificateur de type h short 1 long L long double 25 e caract re de conversion pour le prochain argument d argument int requis en d cimal i int requis d cimal octal ou hexa o int requis en octal x int requis en h xad cimal u unsigned int requis en d cimal non sign c char requis les
5. 3 INTERDIT criture int xpl amp a WARNING pl pointe une variable enti re pas une constante const int xp2 amp a ok p2 est un pointeur sur constante enti re int const xpp2 amp a ok autre criture possible pp2 est comme p2 xp2 3 INTERDIT p2 est un pointeur de constante p2 amp b ok m me si b n est pas une constante p2 6 INTERDIT car p2 est un pointeur sur constante bien que b non constant int const p3 amp b notez la place de const juste avant p3 xp3 6 pas de probl me c est l adresse qui est constante pas le contenu p3 amp b interdit l adresse dans p3 est constante Mot cl volatile Rarement utilis le qualificateur volatile indique au compilateur qu il ne doit pas optimiser la variable en question En particulier le compilateur n utilisera pas de copie de la valeur de la variable m me si elle ne semble pas avoir t modifi e depuis l obtention de la copie Il est g n ralement utilis lorsqu une variable est mise jour par un autre processus que le programme adresse associ e un p riph rique mat riel ou partag e entre plusieurs processus auquel cas le compilateur ne pouvant pas savoir quand la variable est effectivement modifi e il ne doit pas chercher optimiser son traitement 4 Mot cl enum Le mot cl enum ne d finit pas r ellement un type num r la ADA mais cr e seulement des litt raux d une mani
6. cette adresse Exemple d allocation dynamique d un tableau d entiers include lt stdlib h gt int main int taille int xtab c est un pointeur d entiers printf Entrez la taille du tableau scanf d amp taille on suppose que taille est gt 0 if taille lt 0 erreur return 1 on quitte la fonction main ici la taille est positive allocation on r serve taille entiers noter la conversion de type entre parenth se avant malloc tab intx malloc taille sizeof int 18 on peut maintenant utiliser tab comme un tableau tab 0 12 apr s utilisation on lib re la m moire free tab return 0 Comme montr dans l exemple on peut rendre la m moire au syst me d exploitation d sallouer lorsque l utilisation du tableau est termin e avec la focntion free qui prend en param tre le pointeur qui a t utilis comme tableau 2 Tableaux 2 dimensions Nous nous limiterons pour les tableaux multidimmensionnels ceux 2 dimensions sachant que les principes de base s tendent naturellement La d claration d un tableau statique bidimensionnel est de la forme type_d_ l ment variable tableau taille dim_1 taille_dim_2 L acc s aux l ments se fait de mani re tr s semblable aux tableaux unidimensionnels Exemple tab2D 0 0 12 affecte 12 la case d indice 0 0 N anmoins la structure des tableaux 2D est assez sp cifique
7. il donne l ordre de quitter la boucle imm diatement englobante c est dire que s il y a plusieurs boucles imbriqu es l une dans l autre on ne sort que de la boucle la plus int rieure e continue modifie aussi le d roulement de la boucle en faisant se poursuivre l ex cution imm diatement au d but de boucle on passe en fait imm diatement l it ration suivante Exemple affiche les entiers de 9 0 inclus x int cpt cpt 12 do bloc car plus d une instruction x cpt cpt 1 if cpt gt 9 x inutile d afficher continue if cpt lt 0 quitter break printf Z d n cpt while 1 x it rer toujours 1 veut dire vrai on sort avec le break x 3 Sauts et labels Ces constructions h rit es de la programmation en langage d assemblage ne sont que tr s rarement justifi es ex criture d un analyseur lexical encore que Putilisation d un logiciel de type lex soit bien pr f rable traitement d erreurs Elle sont donc viter et ne sont mentionn es qu titre de r f rence e toute instruction peut tre pr fix e par une tiquette qui la forme d un identificateur tiquette instruction e dans la fonction qui contient l tiquette on peut placer des instructions de saut pour d router le cours du programme qui se poursuivra partir de l instruction tiquet e goto tiquette IV Expressions 1 D finition Une expression se lit
8. qui emprunte des l ments au C en 1999 mais ce C99 reste encore peu support par les compilateurs actuellement 2 Diff rences principales avec Ada En g n ral le langage Ada a d j t vu lors des ann es pr c dentes Le C s en distingue notamment par les points suivants le contr le des types est plus r duit beaucoup de conversions de types sont automatiques m me si elles conduisent une perte de pr cision parfois importante il n existe pas de type ensemblistes les op rations bit bit bitwise peuvent ev ntuellement y suppl er il ny a pas de type intervalle les indices de tableaux sont toujours des entiers d marrant 0 les fichiers sont toujours consid r s comme des suites potentiellement infinies de caract res l n y a pas de passage de param tres en mode in out ou out on utilise des adresses pointeurs pour le simuler on ne peut pas d clarer une fonction dans une autre fonction il n existe pas l quivalent du with pour claircir certaines utilisations des pointeurs les packages peuvent tre simul s mais plus grossi rement par des modules bas s sur le d coupage de l application en fichier il wy a pas de concepts orient s objets mais le langage Ada initial Ada83 n en contenait pas non plus si l on veut des objets on peut utiliser C enfin quand un programme Ada compile on est g n ralement proche de la sol
9. re proche de define enum LETTRES A B D D E F G 48 H vl La variable v1 est de type entier de m me que tous les symboles A H qui ont chacun une valeur enti re A est par d faut mis 0 les suivant prennent les valeurs enti res suivantes donc B vaut 1 et C vaut 2 On peut fixer aussi une valeur comme ici D qui vaut la valeur du caract re D dans le code de caract res utilis E et F prendront alors les valeurs suivantes donc respectivement celles des caract res E et F De m me G prend la valeur 48 et H 49 On peut par exemple utiliser ces symboles sans apostrophes ni guillemets ce ne sont ni des cha nes ni des caract res dans une structure switch pour am liorer la lisibilit tout comme on pourrait le faire avec des constantes litt rales du pr processeur Par contre la port e de ces symboles est celle de leur d claration et pas forc ment celle du fichier comme pour les constantes du pr processeur 5 Pointeurs de fonctions Le code d une fonction tant stock en m moire il a une adresse On peut r cup rer cette adresse et r aliser un appel de fonction Pour r cup rer l adresse il faut d clarer un pointeur de fonction on donne le type de retour de la fonction le nom du pointeur pr c d d une toile comme d habitude mais le tout entre parenth ses suivi entre parenth ses de la liste des types des param tres attendus liste vide mais parenth ses obli
10. un tableau de caract res 1 dimension et qui contient un caract re sp cial marquant la fin de la cha ne Si l on veut stocker un message de 20 caract res on doit donc utiliser un tableau d au moins 21 caract res donc 1 caract re de plus pour r server la place de ce marqueur de 13 fin de cha ne Le tableau peut sans probl me tre plus grand gr ce au marqueur de fin s il y a des caract res superflus en fin de tableau situ s derri re le marqueur de fin ils seront ignor s par les fonctions de manipulation et d affichage de cha ne Le marqueur de fin est par convention le caract re non affichable ni imprimable de code 0 On peut le noter 0 mais comme le type caract re est un vu par C comme un type num rique on peut aussi l crire 0 mais attention en aucun cas 70 ni 0 ATTENTION sans ce marqueur un tableau n est pas une cha ne et ne peut pas tre manipul par les fonctions standards sur les cha nes Toutes les possibilit s et restrictions pr c demment mentionn es pour les tableaux sont aussi valables pour les cha nes pas de copie ni de comparaison utilisation possible de pointeurs int main char ch1 10 012345678 attention bien respecter le nombre d l ments il faut penser au marqueur de fin de cha ne qui utilise 1 caract re char ch2 10 ch2 0 ch1 0 ch2 0 vaut maintenant 0 ch2 1 B ch2 1 vaut B printf s n chl
11. 8 aada Da big a a na Le bo be 23 X Utilitaires 24 1 Mode demploi 4 4 an ne ee de ue as Rae DR 4e 4 ar de eh eN ge eo 24 2 Entr es sorties standard stdio h 24 5 Traitement de chaines i stringhi e iiia kra pus us e ea de a ge mo 8 Nada 26 4 Nombres al atoires stdib h lt Lu ass a LL de Re Re RME Re da ee eee 27 XI Extras 27 1 LOS 4 ace 4 4 6 8 baaa ae 2 4 8 a a a aeea d a aa ab dE LS EE 8 be 27 2 Variables statiques r manentes 28 3 Mots cl s const et volatile kg an sa AS aaa eae 88 aaa 28 4 Mot cl enum 2 s on 20 8 iede a he ae 8 a a a e a a a aa aa and SEERE ER ft 4 29 5 Pointeuse de feng LL Peaca Pa gede r de de 48 ee RME RE Saba a a p 29 Avertissement Ce document pr sente un r sum des caract ristiques essentielles du langage C et ne constitue pas un manuel de r f rence exhaustif Mes sources sont t essentiellement le manuel de r f rence historique de Ritchie et Kernighan ainsi que l excellent Cours de programmation Langage C de Bernard Leguy qui f t mon professeur l Universit de Lille I Les ventuelles erreurs et maladresses sont par contre de mon fait I Introduction 1 Origines Le langage C a t con u au d but des ann es 1970 par Dennis Ritchie chez Bell Telephone Laboratories L objectif tait de disposer d un langage souple et efficace pour remplacer l
12. A noter que le nouveau nom de type n est disponible qu partir de l instruction suivante notamment lors de l usage de structures contenant des pointeurs sur elles m mes struct maillon int valeur struct maillon suivant et non pas MAILLON encore inconnu ici MAILLON nouveau nom de type IX Modularit et port e des variables 1 Modularit De m me que le d coupage d un programme en plusieurs fonctions sert en am liorer la lisibilit il est aussi souvent utile de d couper une application en plusieurs fichiers qui isolent des fonctionnalit s relativement ind pend pendantes on parle de modularit D une mani re g n rale un module est donc un ensemble de fonctionnalit s que l on veut rassembler dans un fichier et qui ne constitue pas un programme complet en particulier il n y a pas de fonction main L id e est de compiler le module et de pouvoir r utiliser ces fonc tionnalit s dans d autres programmes sans avoir les r crire Les modules constituent donc des biblioth ques de fonctionnalit s Le module peut donc mettre donc disposition des programmes clients diff rents objets C types variables fonctions Pour r aliser certaines de ses fonctiqns il peut aussi utiliser des types variables et fonctions qui resteront priv es inaccessibles de l ext rieur du module En C le support de la modularit est limit au d coupage en fichiers la possibilit de comp
13. Wall pour warnings all demande au compilateur d afficher tous les avertissements relatifs la syntaxe et la s mantique du code compil il s agit de tournures pr sentes dans votre source qui sont l gales dans le langage mais qui toutefois peuvent rec ler une erreur de programmation Il est extr mement recommand d afficher tous les avertissements quand on programme en langage C malgr tout des erreurs peuvent rester dissimul es 3 ii Gestion de la m moire Le C tant proche de la machine pour les donn es il est utile d avoir une bonne id e de l organisation de la m moire de la machine On peut imaginer la m moire d un ordinateur comme une s rie de cellules capables de contenir chacune un octet c d un nombre binaire de 8 symboles et tiquet es chacune par une adresse les adresses allant de 0 la capacit m moire de la machine 1 la r alit de la gestion m moire est plus compliqu e mais cette abstraction nous suffira Tout objet du langage variable simple tableau fonction est rang en m moire o il occupe un ou plusieurs octets cons cutifs il peut donc tre rep r par l adresse du premier octet m moire qu il occupe Enfin on divise de mani re abstraite la m moire utilis e par le programme en 3 parties e une partie statique d termin e la compilation et qui contient le code des fonctions et les autres objets globaux du programme ces objets existent pendant toute la
14. assembleur dans l criture de code pour le syst me d exploitation Unix De ces origines le langage C a donc h rit les particularit s suivantes c est un langage proc dural muni de structures de contr le if for ressemblant superficiellement Pascal con u la m me poque et aussi Ada l acc s au donn es se fait un niveau d abstraction assez bas par exemple passage d adresses pour simuler les param tres en entr es sorties le typage et d une mani re g n rale le contr le la compilation est plut t faible avec beaucoup d inter pr tations par d faut qui peuvent tre l origine d erreurs difficiles corriger la syntaxe est parfois cryptique et permet des raccourcis scabreux c est un langage efficace en ce sens que en g n ral il ne masque pas la complexit des calculs une expression simple conduit habituellement un calcul simple Le premier livre de r f rence sur le langage C fut co crit par Ritchie et Kernighan dont les initiales K amp R servent r f rencer cette version du langage Par la suite la d finition du C a t notamment compl t e et am lior e en 1989 par PANSI version reprise en 1990 par l ISO et connue sous les d nominations de C ANSI 1 American National Standards Institute 2 International Organization for Standardization C89 ou C90 C est cette version que nous utiliserons L ISO a mis un nouveau standard
15. autres en m moire et auxquels on acc de en donnant le nom de tableau et le num ro on dit l indice de l l ment dans la collection Un tableau est dit statique si il est compl tement sp cifi dans le code au moment de la compilation Les tableaux dont la taille change pendant l ex cution du 12 programme sont dit dynamiques On se limite ici aux tableaux statiques une seule dimension analogue aux vecteurs manipul s en math matiques Ils se d clarent sous la forme type_d_ l ment variable tableau taille Par exemple pour d clarer un tableau de 10 entiers int tab 10 Les l ments sont toujours num rot s on dit indic s partir de 0 Pour un tableau de taille N les indices des l ments vont donc de 0 N 1 Attention il n existe pas dans le langage d op rations fonctionnant sur la totalit du tableau on ne peut pas en une seule op ration copier un tableau dans un autre ni comparer 2 tableaux ni demander un tableau quelle est sa taille Exemples int main int t1 10 t2 10 t1 0 12 range 12 dans la l re case de tl t1 9 5 range 5 dans la derni re case de tl t2 1 t1 0 copie la l re case de tl dans la 2 me case de t2 t1 10 9 ERREUR t1 10 n existe pas tl est indic de 0 9 ti t2 ERREUR on ne peut pas affecter le contenu de t2 dans tl int i for i 0 i lt 10 i lil el OK copie de t2 dans t1 3 Lien e
16. dans une m me variable une collection d l ments de m me type auxquels on acc de par leur indice Il peut aussi tre utile de manipuler des collections d objets de types diff rents ce qui n est pas possible dans un tableau ordinaire On utilise alors une variable structure qui joue un r le similaire celui des enregistrements record de ADA La variable structure un nom chacun des l ments qu elle contient est appel champs et poss de un nom de champs On utilise la notation point e pour acc der un champ particulier d une variable structure Exemple struct client char nom 25 ler champ int numero 2 me champ double compte 3 me champ struct client cll cl2 d sormais struct client est un type connu on peut d clarer des variables la fin de la d finition de la structure struct bidule int machin float truc b1 b2 bl et b2 sont de type struct bidule int main printf entrez le nom du ler client scanf s cll nom printf entrez le num ro du ler client scanf d amp cll numero printf entrez la valeur du compte du ler client scanf f amp cll compte initialiser vide le 2 me client cl2 nom 0 0 cha ne vide cl2 numero 0 cl2 compte 0 0 soustraire 10 euros au compte du client 1 cll compte cll compte 10 0 I return 0 Note les noms de structure et de champ sont g r s dans un espace de n
17. dur e du programme e une partie appel e pile qui sert h berger temporairement les param tres des fonctions et les variables locales lors d un appel de fonction au moment de l appel la pile s accro t pour stocker ces objets puis la fin de l ex cution de la fonction la pile SEA et ces objets temporaires sont d truits e enfin une partie dynamique appel e tas qui sert allouer des objets la demande du programme par le biais d appel aux fonctions de la famille malloc allocation dynamique que nous verrons plus loin partir de leur cr ation ces objets existent jusqu la terminaison du programme sauf si l on demande explicitement leur suppression ou lib ration IT El ments de base 1 Notions l mentaires 1 i fonction main instructions bloc expressions l mentaires e Tout programme contient une fonction de nom main qui indique le point de d part de l ex cution du programme e Partout o l on peut mettre une instruction on peut placer un bloc une s quence d instructions qui sera mis entre accolades Le code d une fonction comme main est toujours plac dans un bloc e Les instructions se terminent par un point virgule e L affectation ranger une valeur dans une variable se note variable expression e Les 4 op rations arithm tiques se notent tandis que le modulo se note et n accepte que des op randes entiers La division est enti re si et seulem
18. vous d assurer que s peut contenir s 1 caract res pour le marqueur de fin char strcat char s const char ct Concat ne ct s et retourne s Attention pas de test si s est assez grand pour contenir ct char strncat char s const char ct int n Concat ne au plus n caract res de ct s et retourne s Attention pas de test si s est assez grand pour contenir ct int stremp const char cs const char ct Compare cs avec ct selon l ordre du jeu de caract reres utilis Retourne une valeur enti re tester e negative value si cs lt ct cs avant ct e z ro si cs est gal ct e positive si cs gt ct cs apr s ct int strncmp const char cs const char ct int n Compare les n premiers caract res au plus de cs et ct M me s mantique que stremp void memcpy void s const void ct int n Copie brute de m moire copie n octets de l adresse ct vers l adresse s and retourne s Risque d erreurs si l intersection zone de destination zone origine n est pas vide 4 Nombres al atoires stdlib h Attention le g n rateur al atoire standard du C ne poss de pas de tr s bonnes propri t s statistiques il est recommand d utiliser une librairie sp cialis e plusieurs exemples comme SVID sont disponibles sur internet pour les utilisations s rieuses void srand unsigned int seed Initialise le g n rateur pseudo al atoire ce qui doit typiquement tre fait une seule fois dans le prog
19. Abr g de programmation en Langage C Denis Robilliard version 2010 Laboratoire d Informatique du Littoral Universit du Littoral C te d Opale Table des mati res I Introduction 1 2 3 II El ments de base 1 3 Origines Diff rences principales avec Ada Quelques rappels de base 3i 3 i Notions l mentaires fonction main instructions bloc expressions l mentaires Commentaires Li Iii Gestion de la memores avei a aaah 4 a a a a a a aAA ar a Variables litt raux et types simples P N 2i 2 iii 2 iv 2 v 2 vi 2 vii Les caract res Les birro coes o s Lu da BEL der SERRE NN DER RER EE Le pr processeur Entr es sorties au terminal Exemple de programme source II Contr le du flot d instructions Expression du choix alternative et aiguillage 1 3 IV Expressions D finition 1 2 L i Li 2 i l 2 iii 2 iv Alternative if Aiguille swiid 3 203 usine ae 8 8 AR a ge ee DET RER due Boucles Tant que while Faire tant que do while Compl ments sur les bon les o 4 4 42 ira 4 4 du don Ed aan Ru Sauts et labels Op rateurs list s par priorit d croissante
20. V Pointeurs tableaux statiques 1 dimension cha nes de caract res 1 2 3 4 Pointeurs Tableaux statiques 1 dimension gt 4 4 es e esaa coea dog a da ga deu 44e Lien entre pointeurs et tableaux 2 4 4 4 4 ua dog ah gate th oh Loue drug ge Variables cha nes de caract res VI Fonctions 15 1 RES o a S a RS aaa a a a aa D aAa e e Ree TS S E E a DIR a e a a A 15 2 Quelques exemples de fonctions a e s 4 4 emoe aah a a a aa a a a a 4 a 16 z Simuler les param tres en mode in out aaa aaa e 16 4 Les macros du pr processer 22 dun da an ga da a a a RE a D mme di RR 4 17 VIITableaux dynamiques tableaux 2 dimensions 18 1 Tableaux dynamiques ss i ad ea de da 4 a BO OR 4e d a a de nd ee dan 18 2 Tobl aus 2 dimensions o 4 4 is eiae a e d a G e h ae e a de a a a a a 19 VIRtructures enregistrements d finition de nom de types 20 1 Siructures en registrel ene 2 4 cacra dos en nn 6 M D de don ele te a mate ere lent 20 2 D finition de nom de types 22404 4444 ua a ae do peti de due do 21 IX Modularit et port e des variables 21 1 MOWAR oa en a a maa aaa a e Eaa a Da E a e aE e S E a aa a a a 21 2 Organisation d un modile oca s ae d e a aa A a a a a a a a a dede a y a 22 3 Egzemple d module sd raataa us pare BO DR ee a aa ea pe a G 4 a 4 22 4 Port e d s variabl s gt 4 44 2 4 4 4 8 8
21. ables et autres types fonctions sont de la forme lettre ou tiret bas _ suivi d un nombre quelconque de lettres tirets bas ou chiffres Cependant les noms commen ant par un tiret bas sont viter car en principe r serv s aux librairies livr es avec le compilateur e Attention C fait la diff rence entre majuscules et minuscules toto et Toto sont 2 noms diff rents Les mots cl s du langage sont toujours en minuscules les noms de types ou de constantes de certaines biblioth ques sont parfois en majuscules e Convention on utilisera les minuscules pour les noms de variables sauf en cas de nom compos de plusieurs mots par ex notePrincipale ou compteurDeBoucles Les majuscules seront r serv es aux constantes ex PI TAILLE_MAX e Une variable peut tre initialis e lors de sa d claration type_variable nom_variable valeur_initiale e Plusieurs variables de m me types peuvent tre d clar es la suite avec d ventuelles initialisations type_variable nom variable 1 nom_variable2 valeur nom variable 3 Emplacement des d clarations Les d clarations de variables se font e soit en dehors de tout bloc et fonction au niveau du fichier les variables d clar es ainsi sont alors par d faut globales tout le programme m me s il se compose de plusieurs fichiers et existent pour toute la dur e d ex cution 4 e soit au d but d un bloc c est notamment le cas de toutes les variables d c
22. ain nombre de biblith ques ou librairies de l anglais library livr es en standard avec le compilateur tendent les capacit s du langage de base en fournissant des fonctions utilitaires et accessoirement des types et des variables Cette section pr sente une s lection de biblioth ques et de fonctionnalit s 1 Mode d emploi Pour utiliser une biblioth que il faut inclure son fichier d en t te include lt entete h gt Dans la suite de la section les fonctions sont pr sent es en donnant leur d claration pr liminaire type de valeur retourn e nom de fonction type et nombre des param tres Pour utiliser les fonctions il faut donc transformer cette d claration en un appel de fonction 2 Entr es sorties standard stdio h FILE fopen const char filename const char mode ouvre un fichier de nom filename et retourne un pointeur de fichier ou le pointeur nul si chec Le mode d ouverture est pr cis par une cha ne e r lecture w criture le fichier est effac s il existe a criture avec positionnement pour ajout en fin r lecture criture w lecture criture le fichier est effac s il existe a lecture criture avec positionnement pour ajout en fin int flush FILE stream force la copie des donn es sur stream ouvert en criture en vidant les tampons provisoires et retourne 0 si succ s EOF si erreur flush 0 vide tous les tampons actuellement ouverts e
23. antes litt rales c d constantes dont la valeur est crite en toutes lettres se notent entre apostrophes par exemple a X 1 750 Certains litt raux correspondent des caract res non imprimables ou qui sont interpr t s par votre diteur de texte par exemple le retour chariot ou par le compilateur On doit donc leur donner une repr sentation sp ciale pour pouvoir les manipuler en tant que simples donn es caract res ils sont cod s sur 2 caract res dont le premier est l anti slash mais ne repr sentent qu un seul caract re Exemple siginification saut SE tabulation ere ert Sande anti slash apostrophe ligne arri re chariot page codage en C An NE gt b r gt f gt IN valeur ASCIP LF TAB BSP CR FF i code octal 12 11 10 15 14 134 47 code d cimal 10 9 8 13 12 92 39 On note aussi les litt raux caract res gr ce leur code ASCII sur 3 chiffres en octal base 8 pr c d d un anti slash nnn Enfin le caract re anti slash est ignor s il est plac devant un caract re ordinaire w lt gt w 2 ii Les entiers D claration de 3 variables enti res dont 2 sont initialis es int i j 5 w 0 Par d faut la base utilis e pour les litt raux entiers est le d cimal mais attention un litt ral entier qui commence par 0 est interpr t comme tant crit en octal base 8 et donc ne devrait contenir que des nombres entre 0 et 7
24. comme une valeur plut t que comme une instruction En tant que valeur une expression est g n ralement utilis e dans un calcul une comparaison ou est affect e une variable Une expression peut tre une simple constante litt rale un nom de variable ou de constante interpr t alors comme son contenu un appel de fonction remplac par la valeur retourn e par la fonction Enfin ces l ment peuvent tre combin s par des op rateurs que nous allons voir en d tail Le langage C poss de 15 niveaux de priorit d op rateurs ce qui rend l usage de parenth ses utile en cas de doute ou simplement pour am liorer la lisibilit du code Certains op rateurs modifient leurs op randes ou bien sont habituellement des instructions dans les autres langages ce qui les rend particuli rement d licat utiliser 10 2 Op rateurs list s par priorit d croissante classe op rateur primaires indice param tres gt unaires amp type sizeof var ou type multiplicatifs h additifs d calages lt lt gt gt ordres lt lt gt gt galit s et binaire amp ou exclusif binaire ou binaire et logique amp amp ou logique conditionnelle 7 affectations lt lt gt gt amp s quence virgule primaires indice op rateur d indi age acc s au i me l ment d un tab
25. d it ration est fausse d s le d but de la boucle aucune it ration n est effectu e 2 iii Faire tant que do while La boucle do while est probablement une exception dans les langages de programmation habituellement il s agit plut t d un r p ter jusqu o l on donne la condition d arr t alors qu en C c est la condition de continuation Par ailleurs il est souvent sage dans un programme de tester s il est possible d it rer avant de commencer le faire c est pourquoi le do while est la structure de boucle la moins utilis e Avant d crire un do while posez vous la question faut il toujours ex cuter au moins une fois les intructions de la boucle do instruction ou bloc while condition it ration Exemple affiche les entiers de 9 0 inclus x int cpt cpt 9 do bloc car plus d une instruction x printf d n cpt cpt cpt 1 while cpt gt 0 e Attention ne pas oublier le point virgule en fin de construction e Notez que si par erreur la variable cpt avait t initialis 1 nous l aurions affich car le test de validit est r alis en fin de boucle apr s l affichage bon entendeur 2 iv Compl ments sur les boucles Deux instructions restent d couvrir relativement aux boucles le break et le continue e break a d j t vu relativement l instruction switch mais il peut aussi s utiliser dans une boucle o
26. du fichier d en t te en rempla ant l extension h par _h Corps du module Le fichier corps est d extension c et ne doit pas contenir de fonction main On y trouve les d finitions compl tes des fonctions leur code la d claration des variables partag es sans extern cette fois et tous les objets priv s au module d claration de types variables et fonctions priv es du module pr fix es par le mot cl static Attention une variable d clar e au niveau du fichier hors de toute fonction sans tre pr fix e par static est visible l ext rieur du module ce qui peut entra ner un conflit de nom si une autre variable de m me nom existe dans un autre fichier Le fichier corps va aussi inclure le fichier d en t te du module ce qui permettra au compilateur de v rifier la correspondance des d clarations p liminaires de fonction avec leur d finition Le corps du fichier n est pas inclus dans le programme client il est compil s par ment en demandant au compilateur de ne pas construire un ex cutable mais simplement un fichier dit objet d extension o lequel sera li lors de la compilation du programme client pour obtenir un ex cutable Compilation du corps de module gcc c module c On obtient un fichier module o Programme client Le programme client du module se contente d inclure le fichier d en t te include module h On le compile en ajoutant le fichier objet gcc o client client c modul
27. e des types entiers voir 2 i contenant la valeur d cimale 11 c est dire 00001011 en binaire e A lt lt 1 vaut 00010110 les bits sont d cal s gauche et un 0 est ins r droite le bit le plus gauche bit de poids fort est perdu Note quivalent une multiplication par 2 si le bit le plus gauche tait 0 e A gt gt 1 vaut 00000101 les bits sont d cal s droite on perd le bit le plus droite bit de poids faible et un 0 est ins r gauche Note quivalent une division enti re par 2 ordres pour les comparaison de valeur num riques rien de sp cial galit signifie gal dans les comparaisons attention ne s applique pas aux tableaux ni aux cha nes de caract res signifie diff rent avec les m mes restrictions et binaire 1001 amp 0011 vaut 0001 ou exclusif binaire 1001 0011 vaut 1010 11 ou binaire 1001 0011 vaut 1011 et logique amp amp est employ dans les conditions ou logique est employ dans les conditions sa priorit est inf rieure celle de amp amp conform ment l interpr tation dans l alg bre de Boole conditionnelle il s agit d une sorte de if qui calcule un r sultat expression conditionnelle est avant le tandis que le s pare la valeur dans le cas vrai de celle dans le cas faux a lt b a b pour valeur le minimum de a et b affectations e l affectation ordinaire est une expression q
28. e n Attention ne pas confondre le caract re x et la cha ne x qui sont de types incompatibles et repr sent s en m moire de fa on diff rente 2 vi Le pr processeur Avant la compilation proprement parler le fichier source passe par un pr processeur qui r alise es sentiellement des op rations similaires du copi coll C est lui ins re les ent tes des biblioth ques utilis es notamment celle des entr es sorties standards stdio h comme on le verra ci apr s Il permet aussi de d finir des constantes de faire de la compilation conditionnelle certaines instructions seront incluses selon la machine le compilateur etc C est lui aussi qui supprime les commentaires avant la compilation Pour le pr processeur on ne parle pas d instructions mais de directives Elles sont rep r es par leur ler caract re qui est toujours Exemple inclusion de la librairie d E S standard include lt stdio h gt Le pr processeur permet aussi de d finir des constantes de la fa on suivante define PI 3 141592 Le premier mot suivant define est le nom de la constante tout ce qui suit sur la ligne jusque la fin de ligne constitue sa valeur Lors de la compilation le pr processeur fera un chercher remplacer et transformera ici toute apparition de l identificateur PI en 3 141592 Attention comme il ne s agit pas d une instruction proprement parler mais d une directive du pr processeur pas de po
29. e o Wall 3 Exemple de module On traite ici un exemple de module fictif qui regroupe toutes les possibilit s offertes avec des types variables et fonctions partag s et d autres priv s On appelle ce module exmod avec donc un fichier d ent te exmod h et un fichier corps exmod cNoter que le nom du fichier en t te est utilis dans sa directive de compilation conditionnelle Fichier d en t te fichier exmod h directives de compilation conditionnelle pour inclure une seule fois le module ifndef exmod_h define exmod_h type partag typedef struct int a b EXSTRUCT variable partag e extern int a 22 d clarat ion pr liminaire de fonction extern n est pas obligatoire pour les fonctions int truc i directi 4endif nt x ve de fin de compilation conditionnelle Fichier corps fichier exmod c inclure include l ent te du module pour v rification exmod h type priv typedef st ruct float x y STRUCTPRIVEE variabl int a variabl static int e partag e sans extern ici e priv e b d finition fonction int truc i return t fonctio static int nt x oto x n priv e toto int n return 2xn 4 Port e des variables Comme vu dans la section II une variable peut tre masqu e temporairement par une autre de m me nom dans un bloc port e l te imbriqu Elle n es
30. ement du compilateur Mot cl const Les variables du type pr fix par const sont consid r es comme constantes le compilateur interdira les affectations ces variables Par contre on peut et on devrait les initialiser leur cr ation c est a priori la seule fa on de leur attribuer une valeur quoiqu il soit aussi possible d utiliser une conversion dans un type non constant mais dans ce dernier cas on peut l gitiment se demander l int r t de lever une interdiction qu on a soi m me pos e Au contraire d une constante du pr processeur voir section 2 vi qui sont de simples copi s coll s de litt raux les constantes d finie avec const sont effectivement stock es en m moire comme les variables elles sont donc typ es et poss dent une adresse Pour que la protection contre l criture soit effective il faut donc qu elle s tende aussi l ventualit de modifier la constante indirectement par son adresse On ne pourra donc affecter l adresse d une constante const que dans un pointeur sur un objet constant attention gcc ne fait que signaler un warning et pas une erreur si on affecte dans un pointeur ordinaire Le fait que le pointeur lui m me puisse ou pas tre constant est compl tement ind pendant Exemples const int a 12 a est une constante enti re int const aa 12 autre criture possible aa est une constante enti re int b 5 printf d in a ok lecture a
31. ent des positifs dans l intervalle 0 2 e 1 o taille est la capacit en bits du type consid r sur la machine consid r e 2 iii Les r els Ils sont de type e float simple pr cision e double double pr cision e long double quadruple pr cision Les litt raux r els s crivent avec 1 point d cimal et au moins un chiffre droite ou gauche La notation scientifique avec exposant de 10 est accept e auquel cas le point d cimal n est plus obligatoire Un litt ral r el est e de type double par d faut e de type float s il est suivi de f ou F e de type long double s il est suivi de 1 ou L Exemples criture interpr tation 15 75F un float 15 75 un double 15 75L un long double 1 575E1 15 75 1575E 2 15 75 2 5e 3 0 0025 25e 4 250000 2 iv Les bool ens Il n existe pas de type bool en vrai faux d fini en C quoiqu il soit possible d inclure une biblioth que ad quate partir du ISO C99 Nous nous en tiendrons au standard et utiliserons simplement des variables enti res pour repr senter les bool ens dans ce cadre la valeur 0 vaux faux et toute valeur diff rente de 0 vaut vrai 2 v Les litt raux cha nes Un litt ral cha ne s crit entre guillemets un exemple de cha ne Tous les litt raux caract res sont autoris s et on utilise pour ins rer un guillemet dans la cha ne Ex cette cha ne se finit par un saut de lign
32. ent si ses 2 op randes sont entiers l ii Commentaires On ouvre un commentaire avec la s quence et on le ferme avec x Un commentaire peut contenir toute suite de caract res sauf x y compris des sauts de lignes Un commentaire est consid r comme un espace par le compilateur et donc on peut m me les utiliser pour s parer des instructions dans une m me ligne ce qui est videmment d conseill pour des raisons de lisibilit Exemple de commentaire ceci est un commentaire C sous forme traditionnelle Par ailleurs bien que cela ne fasse pas partie du standard C89 les compilateurs r cents notamment gcc acceptent souvent aussi la m me notation que le language C pour les commentaires Un tel commentaire d bute par et se continue jusque la fin de ligne Exemple ceci est un commentaire sous forme C cecie est un autre commentaire 2 Variables litt raux et types simples Typage et nommage Les variables servent stocker les donn es manipul es par votre programme Bien que C permette d utiliser des variables sans les d clarer l avance en consid rant alors qu elles sont de type entier par d faut c est une tr s mauvaise pratique on d clarera toujours les variables en leur donnant donc un type explicitement Les d clarations de variables sont des instructions et se terminent donc par un point virgule Elles sont toujours de la forme type_variable nom_variable e Les noms de vari
33. espace ne sont pas saut s s char cha ne termin e par 0 les espaces stoppent la saisie e f g float valeur flottante int scanf const char format Equivalent fscanf stdin f lit depuis l entr e standard clavier int sscanf char s const char format comme fscanf mais lit depuis la cha ne s int fgetc FILE stream Retourne le prochain caract re de stream ou EDF si fin de fichier ou erreur char fgets char s int n FILE stream Lit des caract res depuisstream pour les copier dans s s arr te quand n 1 caract res sont copi s ou si un n est copi ou si fin de fichier ou erreur En l absence d erreur s est une cha ne correcte Retourne 0 si fin de fichier ou erreur ou sinon s int fputc int c FILE stream Ecrit c dans stream Retourne c ou EOF si erreur char fputs const char s FILE stream Ecrit s dans stream Retourne non negatif si succ s ou EOF si erreur int ungetc int c FILE stream Simule le renvoi de c qui doit tre un caract re dans le flux d entr e stream de telle sorte qu il sera retourn par la prochaine lecture Un seul caract re peut tre ainsi renvoy Retourne c ou EOF si erreur int fread void ptr int size int nobj FILE stream Lit au plus nobj objets de taille size depuis le fichier associ stream et les copies en m moire l adresse ptr Retourne le nombre d objets lus feof et ferror peuvent tre te
34. gatoires si c est une fonction sans param tres Lors de l appel on d pointe le pointeur toujours entre parenth ses et on passe les param tres comme pour une fonction normale Si plusieurs fonctions sont de m me type on peut stocker leurs adresses dans un tableau comme dans Pexemple compiler avec la librairie math matique gcc o test test c lm include lt stdio h gt void bonjour printf Bonjour n une fonction extern double fabs double 3 membres de la librairie math h extern double sin double extern double cos double int main declaration et initialisation des pointeurs de fonctions void pf amp bonjour double funtab 3 double amp fabs amp sin amp cos utilisations des pointeurs xbonjour affiche message de bienvenue int a float x printf entrez un entier entre 0 et 2 et un flottant scanf d f amp a amp x printf f n x funtab al x affiche la valeur de la fonction choisie return Q Le m me principe permet la librairie stdlib h d offrir une fonction de tri g n rique void qsort const void base int nmemb int size int compar const void const void Tri par l algorithme du quick sort du tableau d adresse base de taille nmemb l ments chaque l ment tant lui m me de taille size obtenu par l op rateur sizeof Le tri n cessite qu on lui passe l adresse d une fonction de comparais
35. grammation ont une notion ressemblante les fonctions inline Le contr le syntaxique de ces macros est minimal il faut donc les viter et en tous les cas les r server des usages tr s simples Exemple define CUBE n n n n int main int a 3 printf d CUBE a return Q le texte du programme sera transform par le pr processeur en int main int a 3 printf d a x a x a return 0 L usager de macros doit conserver l esprit les points suivants e les pseudo param tres sont sp cifi s entre parenth ses s par s par des virgules sans espaces s il y en a plusieurs et sans type juste apr s le nom de macro e le corps de la macro est tout ce qui suit sur la ligne si la ligne devient trop longue on peut placer un et continuer sur la ligne suivante e comme on ne sait pas a priori dans quel contexte le corps de la macro va tre recopi e il est prudent de le mettre entre parenth ses pour viter les probl mes de priorit d op rateurs e l appel est remplac par une copie on gagne du temps de calcul un tout petit peu mais le programme est plus long e une macro n tant pas une vraie fonction elle n aura pas d adresse m moire lors de l ex cution du code donc sera inutilisable avec un pointeur de fonction par ailleurs aucune r cursivit n est possible VII Tableaux dynamiques tableaux 2 dimensions 1 Tableaux dynamiques Les tableaux v
36. iguillage x default printf a gt An x fin du switch x 2 Boucles Comme indiqu plus haut les boucles ou la r cursivit sont n cessaires pour qu un langage soit g n raliste 2 i Tant que while C est la boucle la plus utilis e d s qu on ne fait pas une simple num ration Elle s exprime sous la forme while condition it ration instruction ou bloc Exemple affiche les entiers de 0 9 inclus x int cpt cpt 0 while cpt lt 10 bloc car plus d une instruction printf Z d n cpt cpt cpt 1 Note si la condition d it ration est fausse au d but de la boucle aucune it ration n est effectu e 2 ii Pour for La boucle for devrait en principe tre r serv des cas de simple num ration d un type discret Typique ment si on ne connait pas l avance le nombre d it rations ou si le compteur de boucle ne parcourt pas une suite simple de valeurs alors il sans doute pr f rable d utiliser la boucle while trait e pr c demment for initialisation condition continuation variation compteur instruction ou bloc Exemple affiche les entiers de 0 9 inclus x int cpt for cpt 0 cpt lt 10 cpt cpt 1 pas de bloc car une seule instruction x printf d n cpt Notes Le code de cet exemple a exactement la m me signification que l exemple du while vu plus haut Si la condition de continuation
37. iler ces fichiers s par ment et une gestion minimaliste des noms des variables types et fonctions utilis s dans ces fichiers pour les rendres visibles de l ext rieur ou au contraire priv s 2 Organisation d un module Id alement un module se pr sente g n rallement en deux fichiers l en t te header d extension h et le corps du module d extension c Dans le cas o le module offre seulement des types partager il n y a pas besoin de fichier corps En t te de module Dans l en t te on va regrouper tous les l ments qui doivent tre visibles de l ext rieur types propos s par le module d clarations pr liminaires des fonctions propos es et ventuellement d claration de variables partag es par le module Les d clarations de variables seront pr c d es du mot cl extern L en t te ne sera pas compil mais sera inclus dans les programmes clients du module par une directive include Attention un fichier d en t te peut se retrouver inclus plusieurs fois indirectement par exemple on inclus deux modules et B qui ont eux m mes inclus tous les deux le module C C se retrouve inclus deux fois ce qui g n re souvent des erreurs de compilation Par cons quent il faut donner des directives de compilation conditionnelle afin de n inclure le module qu une seule fois voir exemple plus bas Ces directives ont besoin d un identifiant pour le module par convention nous utiliserons le nom
38. include lt stdio h gt void valAuCube int n n n gt n xn x si n valait 3 alors il vaut 27 x int main int 3 valAuCube a printf d a return 0 En effet c est le param tre formel de nom n qu on peut consid rer comme une variable locale la fonction valAuCube qui a t modifi La variable a du programme principal est rest e inchang e Passage par adresse Par contre si l on passe l adresse de a alors on va pouvoir changer sa valeur depuis une fonction include lt stdio h gt void valAuCubeBis int xn n est un pointeur sur une variable de type int si l adresse contenue dans n il y avait 3 alors il y a 27 x xn xn xn x n int main int a 3 valAuCubeBis amp a a est pass par adresse printf d a return 0 Syntaxiquement la modification consiste placer amp dans l appel devant le param tre effectif et placer devant chaque apparition du param tre formel correspondant en fait nous utilisons dans la fonction des variables pointeurs pointant sur la variable du programme principal La question se poser lorsqu on crit une fonction est la suivante les param tres seront ils des variables que l on souhaite modifier dans la fonction Si la r ponse est non on utilise un passage par valeur si c est oui on utilise un passage par adresse appel encore passage par pointeur si on voulait tre plus pr cis
39. int virgule en fin de ligne 2 vii Entr es sorties au terminal Les op rations d entr e sorties E S ne font pas partie du langage il faut placer en t te du fichier source la directive d inclusion de la bibioth que standard d E S include lt stdio h gt On acc de alors notamment aux fontions scanf et printf qui r alisent respectivement des saisies au clavier et l affichage sur la console En param tre de ces fonctions on trouve d abord une cha ne contenant des formats comme d ou s qui signifie respectivement qu on va travailler avec un entier et avec une cha ne string Viennent ensuite les variables ou les expressions qui concordent avec ces formats dans l ordre de leur apparition comme illustr dans l exemple de programme ci dessous en section 3 3 Exemple de programme source include lt stdio h gt d finition de constante define MAX 100 int a var globale type entier fonction principale qui va retourner un entier x tout programme contient une fonction principale c est l que d bute l ex cution du programme int main int b c x 2 vars locales la fonction main x char nom MAX tableau de MAX caract res x printf Quel est votre nom n x sortie d une cha ne x avec saut de ligne x scanf s nom saisie d une cha ne dans le tableau nom Note pas besoin de amp avant nom ici x x car c est un tableau printf Bonjour
40. lar es dans une fonction Les variables sont alors locales au bloc et sont dites automatiques elles sont cr es automatiquement l entr e du bloc et d truites lorsque l on en sort Note la r gle de d claration en d but de bloc a t assouplie en C99 et l on peut d sormais d clarer les variables locales partout o on peut placer une instruction ces variables restent locales et automatiques e on peut d clarer deux ou plus variables de m me nom condition qu elles ne soient pas d clar es au m me niveau d imbrication en terme de bloc Une telle variable d clar e dans un bloc imbriqu e prend le pas l int rieur du bloc sur les variables d clar es au niveau sup rieur Les variables de niveau sup rieur sont simplement masqu es elles continuent d exister et sont nouveau accessible la fin du bloc qui les masque voir exemple ci dessous int a a est une variable qui peut contenir des entiers int int b int main d but du programme principal a 12 range 12 dans a ouverture d un bloc imbriqu int a cr ation d une nouvelle variable a a 5 fermeture du bloc imbriqu le a du bloc est d truit b a b re oit 12 contenu dans la variable a 2 i Les caract res D claration de 3 variables de type caract re et de nom k k0 et kl initialis e avec le caract re a char k ko ki a Les litt raux de type caract res ou const
41. leau a 10 a 10 2 param tres passage de param tres lors d un appel de fonction a abs a acc s un champ d un enregistrement e valeur 10 gt acc s un champ d enregistrement point pe gt champ 10 pe est un pointeur d enregistrement unaires d pointage passage d une adresse l objet point pe champ est quivalent pe gt champ amp adressage obtient l adresse d une variable inverse du pr c dent amp a est quivalent a type conversion dans le type sp cifi int 3 14 vaut 3 sizeof var ou type vaut la taille en octets de l objet ou du type pass en param tre sizeof char vaut 1 en g n ral le moins unaire comme dans 3 le compl ment binaire 1001 vaut 0110 n gation logique a gt b quivaut a lt b incr mentation d une variable enti re attention deux usages possibles selon la position de l op rateur e b a quivaut b a a a 1 e b a quivaut a a 1 b a d cr mentation d une variable enti re attention deux usages possibles selon la position de l op rateur e b a quivaut b a a a 1 e b a quivaut a a 1 b a multiplicatif rien de sp cial voir aussi 1 i additifs rien de sp cial d calages droite ou gauche au niveau binaire d autant de bits que le 2 me op rande soit A une variable charact re rappel char fait parti
42. n 1 int fonction deux int n if n gt 0 printf Dans fonction deux n fonction un n 1 int main fonction un 5 return 0 Ces d clarations pr liminaires sont tr s souvent utilis es m me lorsqu elles ne sont pas strictement indis pensables car elles permettent de rendre le code compilable ind pendamment de la position respective des appels et des d finitions de fonctions Elles sont de plus n cessaires pour d couper une application en plusieurs fichiers voir la section sur la modularit 2 Quelques exemples de fonctions Calcul de factorielle int factorielle int n int i resultat l1 for i 2 i lt n i resultat x i return resultat Calcul de factorielle r cursif propos pour l exemple car la r cursivit est sans int r t pour ce probl me int factRec int n if n lt 1 return 1 else return n factRec n 1 Valeur num rique d un caract re chiffre entre 0 et 9 int valNum char c if c gt 0 amp amp c lt 9 return c 70 x les chiffres ont des codes successifs x else x erreur x return 1 par convention x Proc dure pour passer une ligne sur la console void passeLigne printf n 3 Simuler les param tres en mode in out Passage par copie Les param tres sont toujours pass par copie Ainsi dans le programme suivant la valeur affich e sera 3 et pas 27 16
43. n criture 24 int fclose FILE stream ferme le fichier apr s avoir fait un flush si en criture et retourne 0 si succ s EOF si erreur int fprintf FILE stream const char format Convertit les donn es selon les indications de la cha ne format et les envoie sur le flux de sortie stream et retourne le nombre de caract res sortis ou une valeur n gative si erreur Un format de conversion consiste en e un caract re 4 suivi de e un caract re optionnel parmi sortie align e gauche sortie align e droite espace le d un nombre positif est remplac par un espace 0 la sortie est compl t e gauche par des 0 nombre optionnel indiquant la largeur minimale de sortie si specifi par la valeur est donn e pae le prochain argument non utilis e point optionel qui pr c de la pr cision demand e voir apr s pr cision optionnelle si le caract re de conversion est s nombre max de caract re de la cha ne sortir si le carcat re est dans eEf nombre de chiffres apr s le point d cimal pour gG chiffres significatifs pour un entier nombre minimum de chiffres sortir Si donn par la valeur est donn e pae le prochain argument non utilis caract re optionnel modificateur de type h short 1 long L long double caract re de conversion du prochain argument d i int en d cimal o int en octal x X int en h xad cimal u int en d cimal non sign c char
44. ndition instruction ou bloc else instruction ou bloc Exemple if a gt b printf a est plus grand que b n else x ouvrir un bloc si plusieurs instructions x printf a est plus petit printf ou gal b n l ii Aiguillage switch Il est fr quent par exemple gestion d un menu de devoir ex cuter une t che selon la valeur d une expression discr te On utilise soit une s rie de if soit une structure d aiguillage not e switch e Notez qu on peut avoir dans un case une s quence d instructions sans qu elle soit dans un bloc c est une exception la r gle habituelle e L oubli du mot cl break indique C de poursuivre par l ex cution du cas suivant ce qui en g n ral n est pas souhait sauf lorsque plusieurs cas ont le m me traitement e default r cup re toutes les valeurs non test e plus haut Il est fortement recommand de toujours sp cifier un traitement par d faut Exemple on souhaite tester la variable a de type entier x switch a case 0 x on groupe plusieurs cas en ommettant break x case 1 switch expression discr te case valeur 1 s quence d instructions break case valeur_2 s quence d instructions break case valeur n s quence d instructions break default s quence d instructions case 2 printf a lt 2 n break x on quitte l aiguillage x case 3 printf a 3 n break x on quitte l a
45. ntre pointeurs et tableaux On peut consid rer un nom de tableau comme l adresse en m moire de son premier l ment Un nom de tableau peut donc tre assimil une sorte de pointeur constant qu on ne peut pas modifier On peut donc acc der ses l ments par une op ration de d pointage Exemples int main int t1 10 t2 10 xtl 12 range 12 dans la 1 re case car tl est l adresse de cette case x t1 9 5 range 5 dans la derni re case de tl 9 cases apr s la premi re x t2 1 xtl copie la l re case de tl dans la 2 me case de t2 x t1 10 9 ERREUR t1 10 n existe pas int i for i 0 i lt 10 i x tl i t2 i copie de t2 dans t1 Le code de copie d un tableau dans un autre donn juste au dessus en exemple peut aussi tre exprim en copiant les adresses des tableaux dans des variables pointeurs int main int t1 10 t2 10 on suppose que t2 est rempli par des donn es copier dans tl int i pl tl xp2 t2 for i 0 i lt 10 i xp1 xp2 A noter que l on ne gagne pas vraiment en lisibilit C est possible mais viter 4 Variables cha nes de caract res Les cha nes de caract res que je noterai simplement cha nes sont un type de donn es tr s utilis notam ment pour l affichage et la saisie de messages noms bref pour les donn es textuelles En C une variable cha ne n est rien d autre qu
46. omme voltage intensite et puissance D utilisation de noms clairs permettrait notamment de d tecter plus facilement des erreurs de programmation comme par ex emple ajouter une intensit un voltage Le langage C supporte cette fonctionnalit en permettant la cr ation de noms de types sans toutefois avoir un contr le de types strict la ADA ou la C ce qui en limite l efficacit ce n est pas le compilateur qui v rifiera que vous n additionnez pas des intensit s des voltages Un nouveau type se construit toujours partir des types pr existants ventuellement compos s en tableau en structure ou union La d finition du nouveau type s crit comme une d claration de variable de ce type pr c d e du mot cl typedef Le nom qui servirait de nom de variable sans typedef devient un nom de type Par convention on crit souvent en majuscules ces noms de types pour les distinguer des noms de variables typedef description_du_type NOM_DU_TYPE Exemples typedef double INTENSITE typedef double VOLTAGE INTENSITE et VOLTAGE sont des synonymes de double VOLTAGE v1 v2 deux variables de type VOLTAGE typedef char CHAINE 80 CHAINE chl chl est un tableau de 80 caract res typedef struct client char nom 25 ler champ int numero 2 me champ double compte 3 me champ CLIENT CLIENT est un synonyme du type struct client CLIENT cll cl2 cell et cl2 sont de type CLIENT
47. oms diff rents de celui des autres identifiants On peut donc avoir une variable avec le m me nom qu un champ sans probl me d ambigu t Structures r cursives Une structure ne peut se contenir elle m me sous peine d engendrer une r cursion infinie donc pas de struct recurse int truc char machin struct recurse bidule impossible r cursion infinie J Par contre une structure peut tout fait contenir un pointeur vers une variable du m me type structure ou d un autre type structure videmmment ce qui est n cessaire pour implanter des collections d objets dits cha n s listes cha n es arbres certaines repr sentations de graphes etc Exemple de d claration d une liste cha n e simple d entiers struct maillon 20 int valeur valeur m moriser dans ce maillon de la liste struct maillon suivant pointeur vers le maillon suivant 2 D finition de nom de types Le m canisme pr sent ci dessus pr sente le l ger d faut d introduire un nom compos pour les types struc tures ainsi dans l exemple pr c dent le nom de type est struct client et pas simplement client comme on aurait pu s y attendre D une mani re g n rale il est de toute fa on utile de pouvoir nommer des types de don n es son gr pour faciliter la compr hension du code Ainsi une application manipulant des donn es relatives un r seau lectrique pourrait utiliser des types c
48. on a affaire en fait un tableau de lignes c est dire un tableau de tableaux unidimensionnels ce qui fournit les 2 dimensions souhait es Soit un l ment de tableau de type T on a vu que le nom d un tableau de tels l ments est vu comme une adresse de T c est dire un Tx Si on prend maintenant un tableau de tels tableaux il y a nouveau passage l adresse et on obtient un objet de type T un pointeur de pointeur de T c est le type que nous devrons g rer lors d une allocation dynamique Nous donnons ci dessous un exemple d allocation statique et un d allocation dynamique de 2 tableaux d entiers bidimensionnels include lt stdlib h gt int main int t1 5 10 tableau 2D statique d entiers exemples d utilisation t1 0 0 5 t1 4 9 t1 0 0 int xxt2 pour un tableau dynamique 2D d entiers allouer le tableau de tableaux t2 intxx malloc 5 sizeof int allouer chacun des tableaux lignes int i for i 0 i lt 5 i t2 i int x malloc 10 x sizeof int on peut maintenant utiliser t2 comme on utiliserait tl t2 0 0 5 t2 4 9 t2 0 0 rendre la m moire au syst me apr s utilisation int i for i 0 i lt 5 i free t2 i free t2 19 VIII Structures enregistrements d finition de nom de types 1 Structures enregistrements Nous avons vus pr c demment la notion de tableau qui permet de rassembler
49. on dirait que l on passe par copie l adresse de la variable Notez que vous avez d j utilis ces appels par adresse avec la fonction de saisie scanf qui videmment doit modifier le contenu des variables pass es en param tres Cas particulier des tableaux Comme on l a vu plus haut un nom de tableau peut tre vu comme l adresse de la zone m moire o est stock le contenu du tableau Par cons quent passer un tableau en param tre c est passer son adresse et tout passage de tableau est toujours un passage par adresse Donc on en d duit que e on peut toujours modifier un tableau re u en param tre dans une fonction e il est inutile de pr fixer avec l op rateur d adressage amp un nom de tableau que l on vaut passer en mode in out puisque par d faut c est d j une adresse que l on manipule Les compilateurs un peu anciens signalent une erreur dans ce cas certains plus r cents sont plus compr hensifs Ainsi lorsque l on veut saisir une cha ne pas besoin de amp car une cha ne est stock e dans un tableau int main char chaine 80 printf saisir une cha ne n scanf s chaine sans amp printf s chaine 4 Les macros du pr processeur Le pr processeur permet de simuler des appels de fonctions que l on nomme macros o macro instructions en fait le corps de la fonction sera ins r dans le texte du programme chaque appel d autres langages de 17 pro
50. on permettant d obtenir l ordre relatif entre deux l ments du tableau cette fonction prend deux pointeurs sur les objets comparer et renvoie 1 0 ou 1 selon que le premier est avant gal ou apr s le second Les pointeurs param tres de la fonction de comparaison sont g n riques void car ils sont pass s par qsort qui ne peut pas conna tre le type qui va lui tre soumis A l int rieur de votre fonction de comparaison il suffit de convertir les pointeurs g n riques en pointeurs typ s afin de pouvoir acc der aux l ments du tableau int triEntierDecroissant const void xpl const void xpl ma fonction de tri pour des entiers donne l ordre d croissant const int xel const int pl const int xe2 const int p2 if xel gt xe2 return 1 xel et xe2 sont deja dans l ordre decroissant if xel lt xe2 return 1 xel doit tre apres xe2 else return 0 egalite triEntierDecroissant int main int tab 5 12 3 5 7 4 appel du tri avec ma fonction de comparaison de 2 elements du tableau qsort void x tab 5 sizeof int amp triEntierDecroissant ffich affichage 20 int i for i 0 i lt 5 i printf d n tablil return 0 31
51. ossible avec une variante de struct appel e union struct coord int x y une paire de coordonn es l cran J struct figure int genre 0 carr 1 cercle struct coord cl l re coord point haut gauche si carr union extra 97 centre si cercle struct coord c2 2nd coord si carr int rayon rayon si cercle extra donn es compl mentaires Fj int main struct figure f utilisation de f comme un carr f genre 0 f c1 x 10 f cl y 50 f extra c2 x 40 f extra c2 y 120 on change d avis f doit stocker un cercle f genre 1 f extra rayon 15 les donn es stock es dans f extra c2 sont cras es Dans cet exemple il faut comprendre que la structure utilise le m me espace m moire celui de union extra pour ranger soit la paire de coordonn es c2 soit la donn e rayon Donc en aucun cas on ne peut m moriser les deux en m me temps c est pourquoi il est g n ralement indispensable d ajouter un champ qui m morise quelle est la configuration qui a actuellement cours c est le r le du champ genre dans l exemple On peut ventuellement se dispenser de ce champ ses risques et p rils notez que le langage C ne contr le pas la coh rence des acc s aux champs d une union on pourrait crire dans extra c2 et relire dans extra rayon Nous ne d taillons pas davantage l utilisation des unions qui sont r serv es des u
52. raduit en double D claration pr liminaire Une difficult syntaxique se pr sente lorsque le programmeur veut appeler une fonction qui se trouve tre d clar e plus bas dans le code que l endroit de l appel n ayant pas encore rencontr e la d finition de la fonction que l on appelle le compilateur va g n rer un message d erreur et le programme ne sera pas compl tement compil Or on ne peut pas toujours placer les d finitions de fonctions avant les appels notamment dans le cas de deux fonctions s appelant r cursivement l une l autre Dans cette situation on va placer une d claration pr liminaire de la fonction en t te du programme avant l appel Cette d claration consiste simplement dupliquer l ent te de fonction sans son corps entre accolades suivi d un point virgule type_retourn nom de fonction type param 1 nom_ param 1 type param 2 nom param 2 ER Le compilateur passe alors d abord sur la d claration pr liminaire lorsqu il rencontre l appel de la fonction il peut v rifier que le type et le nombre des param tres correspondent bien et il effectuera nouveau cette v rification lorsqu il rencontrera la d finition compl te de la fonction Exemple d clarations pr liminaires en t te du code int fonction un int n int fonction deux int n d fintions et appel des fonctions int fonction un int n if n gt 0 15 printf Dans fonction un n fonction deux
53. ramme son d marrage Le param tre seed est la graine du g n rateur elle lui donne son point de d part Lorque deux ex cutions utilisent la m me graine les nombre g n r s seront les m mes ce qui peut tre utile pour mettre au point le programme Une fois la mise au point termin e on utilise souvent comme graine l heure obtenue par l appel la fonction times 0 int rand void Retourne un entier pseudo al atoire dans l intervalle 0 RAND MAX On peut typiquement convertir cet entier en flottant dans l intervalle 0 1 par l expression rand 1 0 double RAND MAX XI Extras On pr sente ici quelques constructions peu fr quemment utilis es 1 Unions Il arrive qu on souhaite pouvoir stocker dans une variable struct des donn es telles que leur format nom bre taille et type de donn es l mentaires d pend lui m me de la donn e stocker on parle d enregistrement avec partie variable Par exemple un logiciel de dessin peut m moriser des formes g om triques dessin es par Putilisateur dans le cas d un carr on peut le stocker par les 2 paires de coordonn es coin en haut gauche et coin en bas droite mais pour un cercle il faut fournir la coordonn e du centre et son rayon On pourrait alors obtenir un gain de place en utilisant la m me zone de stockage m moire soit pour la 2 me paire de coordonn es soit pour le rayon selon le type de figure C est ce qui est rendu p
54. rit re privil gier pour 95 du code 14 VI Fonctions Quelques l ments essentiels des fonctions en C e il a peu de diff rence syntaxique entre fonction et proc dure la ADA une proc dure est simplement une fonction qui renvoie void c est dire rien n ant e un appel ou une d finition de fonction est toujours suivie d une paire de parenth ses Ces parenth ses entourent les param tres ou rien du tout s il n y a pas de param tres e les param tre effectifs lors de l appel sont toujours pass s par valeur pas d quivalent du mode out de ADA e pas de d finition de fonction l int rieur d une autre d finition de fonction 1 Syntaxe Forme d une d finition de fonction type_retourn nom de fonction type param 1 nom_ param 1 type param 2 nom param 2 d clarations de variables locales liste d instructions gt e si la fonction ne doit rien retourner le type retourn est void e si le type retourn n est pas void alors il doit y avoir une instruction return expression retournant le r sultat e si le type retourn est void on peut trouver l intruction return sans expression associ e qui sert unique ment quitter imm diatement la fonction pas le programme Forme d un appel de fonction nom de fonction param effectif 1 param effectif 2 e tout param tre entier plus court que int est traduit en int e tout param tre float est t
55. s n nom le format s est remplac par x la cha ne contenue dans nom printf Entrez 2 entiers scanf d d amp a amp b x le format d veut dire entier d cimal attention ne pas oublier les amp c a b x c contient la somme de a et b printf la somme est d n c return 0 sous Unix on retourne un entier la fin 0 ok x fin de main x III Contr le du flot d instructions Par d faut les instructions sont ex cut es en s quence c est dire l une apr s l autre dans l ordre occidental de lecture de gauche droite et de haut en bas Pour qu un langage soit g n raliste th or me de B hm Jacopini il faut qu il comprenne la s quence l alternative le si et soit la boucle soit la r cursivit Ce sont ces structures de contr le du flot d instructions qui influent sur l ordre d ex cution des instructions que nous voyons dans la suite A noter que la mise en forme du texte source importe peu plusieurs instructions peuvent tre la suite sur une m me ligne et l o on peut mettre un espace on peut passer une ou plusieurs lignes N anmoins pour pr server la lisibilit on crit g n ralement une seule instruction par ligne 1 Expression du choix alternative et aiguillage 1 i Alternative if La construction if se note if condition instruction ou bloc L alternative peut contenir une partie sinon if co
56. st s Note les int peuvent tre longs int fwrite const void ptr int size int nobj FILE stream Ecrit dans stream nobj objets de taille size copi s depuis le tableau ptr Retourne le nombre d objets crits Note les int peuvent tre longs int fseek FILE stream long offset int origin Positionne le fichier associ au flux stream sur la position origin offset Trois valeurs sont possibles pour origin e d but de fichier pour SEEK SET e position courante pour SEEK CUR e fin de fichier pour SEEK END Retourne non zero si erreur long ftell FILE stream Retourne la position courante dans le fichier associ au flux stream ou 1 si erreur void rewind FILE stream Equivalent fseek stream OL SEEK SET int feof FILE stream Retourne vrai c est dire 0 si l indicateur fin de fichier a t positionn pour le flux stream il faut avoir tent une lecture en fin de fichier pour qu il le soit int ferror FILE stream Retourne non zero si l indicateur d erreur est positionn pour stream 3 Traitement de cha nes string h int strlen const char cs Retourne la longueur de la cha ne cs 26 char strcpy char s const char ct Copie ct dans s et retourne s Attention pas de test si s est assez grand pour contenir ct char strncpy char s const char ct int n Copie au plus n caract res de ct dans s compl te s avec 0 si possible et retourne s Attention
57. t alors plus accessible par son nom bien qu elle continue d exister On appelle ndue ou les tendues pas forc ment contig es du code o une variable est accessible elle a t d clar e et elle n est pas masqu e Principale s r gles en mati re de port e des variables e la port e d une variable ne d pend pas de l ex cution du code elle est enti rement d termin e statiquement lors de la compilation donc il suffit de lire le code pour la d terminer e un nom de variable d signe la variable d clar e sous ce nom dans le bloc englobant le plus proche d faut de la trouver dans un bloc englobant elle doit tre d clar e au niveau du fichier e une d claration au niveau du fichier hors de tout bloc pr fix e par extern d signe une variable d clar e au niveau fichier dans un autre module e extern dans une fonction indique simplement que la variable est d clar e en dehors de la fonction elle peut l tre dans le m me module e les param tres formels d une fonction se comportent comme des variables locales Attention C a des r gles par d faut dangereuses ex une variable non d clar e est consid r e comme de type int Les r gles pr c dentes sont pour une part des conventions de bonnes programmation L essentiel est illustr dans l exemple suivant pr sentant deux modules ml et m2 d une application fictive 23 module ml c module m2 c ex
58. tern int i i vient de m2 int i global ml et m2 int j j global ml et m2 static int j local m2 double f f n est pas d finie ce j masque dans m2 le j global de ml il faut qu elle le soit dans m2 c est donc une d claration extern double f d finition de f f globale ml et m2 static int g g est priv e ml return 2 3 il masque dans ml le g global de m2 return 1 int g global l application mais masqu dans ml extern int j celui de m2 int h double x h globale ml et m2 double y return int f j extern int i j externes la fonc tion i de m2 j de ml y f x f de m2 x le param tre pass h return g g de ml Notez dans l exemple que le m me nom de fonction g et le m me nom de variable j sont utilis s dans les deux modules C est possible gr ce au mot cl static qui restreint un nom tre priv un module et donc permet l emploi du m me nom dans d autres modules Sans static il y aurait conflit de nom et on ne pourrait pas lier les deux modules dans une application Cette technique est tr s utile quand on crit un module on ne sait pas forc ment l avance avec quels autres modules il va tre compil par cons quent tout ce qui peut tre mis en priv avec static doit l tre afin d viter de possibles futurs conflits de noms X Utilitaires Un cert
59. tilisations tr s particuli res et qui sont rendus grandement obsol tes dans les langages objets comme C 2 Variables statiques r manentes On a vu que le mot cl static servait indiquer qu une variable ou fonction est priv e un module Les concepteurs de C ont maladroitement utilis le m me mot cl pour un autre concept celui de variable lr manente Une variable static d clar e dans une fonction est certes priv e cette fonction elle l aurait t m me sans static mais de plus elle est allou e dans la zone statique de la m moire comme si elle avait t d clar e au niveau du fichier N tant pas d truite la fin du bloc fonction elle garde sa valeur entre deux appels de la fonction contrairement au variables locales habituelles Si elle est initialis e lors de sa d claration cette initialisation est effectu e une seule fois en d but de programme Cette astuce permet par exemple de compter combien de fois une fonction est appel e dans un programme void truc static int cpt 0 variable r manente initialis e 0 une seule fois en d but de programme cpt 1 ex cut chaque appel printf truc vient d tre appel e pour la d me fois n cpt 3 Mots cl s const et volatile Les mot cl s const et volatile sont des qualificateurs de types introduits dans le C90 ils sont plac s en pr fixe d un type ou d une variable pour pr ciser le comport
60. ui a pour valeur ce qui a t affect donc a 3 vaut 3 Par cons quent on peut cha ner des affectations a b c 3 les 3 variables contiennent 3 notez que l affectation est analys e de droite gauche c est c 3 qui est effectu en premier e les autres versions cumulent l affectation et une op ration parmi celles d j vues plus haut Ainsi a 3 quivaut a a 3 de m me a 3 quivaut a a 3 etc s quence on peut toujours effectuer plusieurs expressions la suite en les s parant par une virgule le tout reste une expression ayant pour valeur la derni re sous expression Exemple d a 5 scanf d amp b c 12 cette expression range 5 dans a effectue la saisie de b range 12 dans c et finalement range aussi 12 dans d noter l appel la fonction scanf qui est une expression viter pour conserver la lisibilit V Pointeurs tableaux statiques 1 dimension cha nes de caract res 1 Pointeurs Un pointeur plus pr cis ment une variable pointeur est une variable qui peut contenir l adresse m moire d un objet par exemple une variable ou une fonction Par exemple un pointeur peut contenir l endroit dans la m moire l adresse m moire o une variable enti re range la donn e qu elle contient En utilisant cette adresse on peut directement modifier la valeur rang e dans la variable sans utiliser le nom de la variable En C les adresses sont typ es c est
61. us pr c demment avaient une taille fix e une fois pour toute lors de leur d claration dans le code source du programme C est une m thode tout fait l gitime pour de nombreuses applications mais qui trouve ses limites lorsqu on ne connait pas la taille du tableau manipuler au moment o l on crit le code par exemple on fait du calcul de matrices mais que la taille des matrices ne sera connue qu l ex cution Il existe donc un proc d pour cr er des tableaux dynamiquement lors de l ex cution du programme on parle d allocation dynamique Pour cel on inclut la biblioth que stdlib h ou encore alloc h On ne d clare pas un tableau proprement dit mais une variable pointeur et on alloue c d r serve un bloc de m moire de la taille n cessaire pour stocker le tableau La fonction d allocation standard est malloc qui prend en argument la taille du bloc m moire r server et retourne l adresse du premier l ment du bloc qu il faudra conserver pour acc der au tableau Pour conna tre la taille du bloc m moire passer en param tre malloc il suffit de multipliser la taille du tableau en nombre d l ments par la taille occup e par un l ment en m moire laquelle s obtient par le mot cl sizeof Enfin la fonction malloc retourne un pointeur de type g n rique void et il faut une conversion de type entre parenth ses pour viter les messages d avertissements du compilateur lorsqu on sauve
62. ution moins d une erreur de conception la base Mais quand un programme C compile il peut rester de nombreuses bogues cach es par les interpr tations par d faut du langage me 3 Quelques rappels de base 3 i Compilation Le langage C est un langage compil c est dire que le programmeur dite un fichier texte d crivant son algorihtme en C appel fichier source d extension c Le compilateur analyse le source et cr e un programme quivalent un langage machine appel fichier objet d extension o Ce fichier objet devra encore tre li notamment avec du code d initialisation d pendant du syst me et tr s souvent du code issu des biblioth ques standards qui compl tent les possibilit s du langage C ex entr es sorties standards Lorsque l application que l on crit est assez grande on la divise en plusieurs modules qu il faut aussi lier entre eux Apr s cette l dition de liens on obtient finalement un fichier ex cutable Note en TP nous utiliserons le compilateur gcc Gnu C Compiler qui est un logiciel libre Dans le cas o l on ne compile qu un seul fichier l dition de lien sera int gr e dans l appel au compilateur et le fichier ex cutable sera g n r en une fois gcc o nom_executable source c Wall Note l option o signifie output et pas objet et sert pr ciser le nom de l ex cutable en sortie sinon il porte le nom par d faut a out L option

Download Pdf Manuals

image

Related Search

Related Contents

breco1  Istruzioni per l`uso PT-LX30HE PT  PDF: 3157KB    Bedienungsanleitung P7-TS - bei WR  おはよう!ニッポン全国消防団  - Sacramento  Samsung Galaxy Note 2 Bruksanvisning(KK)  Lenmar SOLOXP-N battery charger    

Copyright © All rights reserved.
Failed to retrieve file