SlideShare une entreprise Scribd logo
1  sur  340
Télécharger pour lire hors ligne
INTRODUCTION        AU LANGAGE                 C                                                                char rahc                                                                   [ ]                                                                    =                                                                  "n/"                                                                    ,                                                                redivider                                                                   [ ]                                                                    =                                                       "Able was I ere I saw elbA"                                                                    ,                                C                                                                    *                                                             deliver,reviled                                                                    =                                                                   1+1                                                                    ,                                                               niam ; main                                                                   ( )                                                                  {/*}                                                                   */                                                                 int tni                                                                    =                                                                   0x0                                                                    ,                                                             rahctup,putchar                                                                   ( )                                                           ,LACEDx0 = 0xDECAL,                                                                rof ; for                                                             (;(int) (tni);)                                                               (int) (tni)                                                          = reviled ; deliver =                                                                redivider                                                                    ;                                for ((int)(tni)++,++reviled;reviled* *deliver;deliver++,++(int)(tni)) rof                                                                    =                                                             (int) -1- (tni)                                                          ;reviled--;--deliver;                                                             (tni) = (int)                                                          - 0xDECAL + LACEDx0 -                                                                rof ; for                                       (reviled--,(int)--(tni);(int) (tni);(int)--(tni),--deliver)                                                            rahctup = putchar                                                           (reviled* *deliver)                                                                    ;                                                            rahctup * putchar                                                            ((char) * (rahc))                                                                    ;                                                                   /*                                                                  {*/}Bernard Cassagne         http://krimo666.mylivepage.com/
Bernard CassagneIntroduction au langage C          norme iso ansi             Laboratoire clips     Universit Joseph Fourier & cnrs              e                 Grenoble http://krimo666.mylivepage.com/
Copyright 1997-1998 Bernard CassagneCe texte est copyright et nest pas dans le domaine public. Sa reproduction est cependant                      eautorise a condition de respecter les conditions suivantes :       e
Si ce document est reproduit pour les besoins personnels du reproducteur, toute      forme de reproduction totale ou partielle est autorise.                                                              e      Si ce document est reproduit dans le but detre distribu
de tierces personnes :                                                                ea           il devra etre reproduit dans son intgralit sans aucune modi cation. Cette                                                  e     e           notice de copyright devra donc etre prsente.                                                    e           il ne devra pas etre vendu. Cependant, dans le seul cas dun enseignement           gratuit, une participation aux frais de reproduction pourra etre demande, mais                                                                                   e           elle ne pourra etre suprieure au prix du papier et de lencre composant le                                    e           document.Toute reproduction sortant du cadre prcis ci-dessus est interdite sans accord pralable                                         e e                                        ede lauteur.    Un chier PostScript contenant ce document est librement accessible par lurl :ftp:   ftp.imag.fr pub DOC.UNIX C Introduction ANSI C.psVersion de ce document : 2.1 de juin 1998                     http://krimo666.mylivepage.com/
Table des mati
res              e1 Les bases                                                                                                                     5  1.1    Les versions du langage C . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    5  1.2    Langage et biblioth
que standard . . . . . . . .                              e                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    5  1.3    Les phases de compilation . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    6  1.4    Les jeux de caract
res . . . . . . . . . . . . . .                            e                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    6  1.5    Les units lexicales . . . . . . . . . . . . . . . .                  e                                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    6         1.5.1 Les mots-cls . . . . . . . . . . . . . . .                             e                                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    7         1.5.2 Les identi cateurs . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    7  1.6    Les commentaires . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    7  1.7    Les types de base . . . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   10         1.7.1 Les caract
res . . . . . . . . . . . . . . .                           e                                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   10         1.7.2 Les entiers . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   10         1.7.3 Les ottants . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   10  1.8    Les constantes . . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   11         1.8.1 Les constantes enti
res . . . . . . . . . .                                     e                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   11         1.8.2 Les constantes caract
res . . . . . . . .                                       e                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   11         1.8.3 Les constantes ottantes . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13  1.9    Les chanes de caract
res littrales . . . . . . .                                e       e                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14  1.10   Les constantes nommes . . . . . . . . . . . . .                                e                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14         1.10.1 Les de ne . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15         1.10.2 Les numrations . . . . . . . . . . . . .                     e e                                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15  1.11   Dclarations de variables ayant un type de base           e                                                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16  1.12   Les oprateurs les plus usuels . . . . . . . . . .                e                                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16         1.12.1 La ectation . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16         1.12.2 Laddition . . . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17         1.12.3 La soustraction . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17         1.12.4 La multiplication . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   18         1.12.5 La division . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   18         1.12.6 Loprateur modulo . . . . . . . . . . .                     e                                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   18         1.12.7 Les oprateurs de comparaison . . . . .                       e                                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19  1.13   Les instructions les plus usuelles . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19         1.13.1 Instruction expression . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19         1.13.2 Instruction compose . . . . . . . . . . .                                     e                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20         1.13.3 Instruction if . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20  1.14   Inclusion de source . . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   21  1.15   Les procdures et les fonctions . . . . . . . . .                  e                                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   22                                               iii                      http://krimo666.mylivepage.com/
1.15.1 D nition dune fonction . . . . . . . . . . . . . . . . . . .                  e                                                                   .   .   .   .   .   22         1.15.2 Appel dune fonction . . . . . . . . . . . . . . . . . . . . . .      .   .   .   .   .   24         1.15.3 Les procdures . . . . . . . . . . . . . . . . . . . . . . . . .                         e                                                            .   .   .   .   .   25         1.15.4 Fonctions imbriques . . . . . . . . . . . . . . . . . . . . . .                                    e                                                 .   .   .   .   .   25         1.15.5 Rcursivit . . . . . . . . . . . . . . . . . . . . . . . . . . .                  e        e                                                          .   .   .   .   .   25         1.15.6 Rfrence
une fonction externe . . . . . . . . . . . . . . .                  ee       a                                                          .   .   .   .   .   26         1.15.7 Comprendre la documentation de la biblioth
que standard .                                                                  e                   .   .   .   .   .   26         1.15.8 Les fonctions dans le style KR . . . . . . . . . . . . . . .         .   .   .   .   .   26  1.16   Impression formatte . . . . . . . . . . . . . . . . . . . . . . . . . .                             e                                                        .   .   .   .   .   27  1.17   Structure dun programme . . . . . . . . . . . . . . . . . . . . . . .       .   .   .   .   .   28  1.18   Terminaison dun programme . . . . . . . . . . . . . . . . . . . . .         .   .   .   .   .   29  1.19   Mise en oeuvre du compilateur C sous UNIX . . . . . . . . . . . .            .   .   .   .   .   29  1.20   Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   .   .   .   .   .   29  1.21   Rcration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .           e e                                                                        .   .   .   .   .   332 Les tableaux                                                                                            35  2.1 Les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .            .   .   .   35      2.1.1 Dclaration de tableaux dont les lments ont un type de base               e                                  ee                                          .   .   .   35      2.1.2 Initialisation dun tableau . . . . . . . . . . . . . . . . . . . . .             .   .   .   36      2.1.3 Rfrence
un lment dun tableau . . . . . . . . . . . . . . .               ee        a ee                                                                 .   .   .   37      2.1.4 Chanes et tableaux de caract
res . . . . . . . . . . . . . . . . .                                              e                                               .   .   .   37  2.2 Les instructions itratives . . . . . . . . . . . . . . . . . . . . . . . . .                         e                                                                    .   .   .   37      2.2.1 Instruction for . . . . . . . . . . . . . . . . . . . . . . . . . . .             .   .   .   37      2.2.2 Instruction while . . . . . . . . . . . . . . . . . . . . . . . . . .             .   .   .   38      2.2.3 Instruction do . . . . . . . . . . . . . . . . . . . . . . . . . . . .            .   .   .   39      2.2.4 Instruction break . . . . . . . . . . . . . . . . . . . . . . . . . .             .   .   .   39      2.2.5 Instruction continue . . . . . . . . . . . . . . . . . . . . . . .                .   .   .   40  2.3 Les oprateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .             e                                                                                .   .   .   40      2.3.1 Oprateur pr et postincrment . . . . . . . . . . . . . . . . . .                 e         e             e                                                    .   .   .   40      2.3.2 Oprateur pr et postdcrment . . . . . . . . . . . . . . . . .                 e         e          e e                                                     .   .   .   41      2.3.3 Quelques utilisations typiques de ces oprateurs . . . . . . . . .                                                         e                                    .   .   .   41      2.3.4 Oprateur et logique . . . . . . . . . . . . . . . . . . . . . . . .                 e                                                                            .   .   .   42      2.3.5 Oprateur ou logique . . . . . . . . . . . . . . . . . . . . . . . .                 e                                                                            .   .   .   42      2.3.6 Oprateur non logique . . . . . . . . . . . . . . . . . . . . . . .                 e                                                                            .   .   .   43  2.4 Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .          .   .   .   433 Les pointeurs                                                                                           45  3.1 Notion de pointeur . . . . . . . . . . . . . . . . . . . . . . . . . .      .   .   .   .   .   .   45  3.2 Dclarations de variables de type pointeur vers les types de base        e                                                                         .   .   .   .   .   .   45  3.3 Type de pointeur gnrique . . . . . . . . . . . . . . . . . . . . .                          ee                                                      .   .   .   .   .   .   45  3.4 Oprateur adresse de . . . . . . . . . . . . . . . . . . . . . . . . .          e                                                                       .   .   .   .   .   .   46  3.5 Oprateur dindirection . . . . . . . . . . . . . . . . . . . . . . .          e                                                                       .   .   .   .   .   .   46  3.6 Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    .   .   .   .   .   .   47  3.7 Pointeurs et oprateurs additifs . . . . . . . . . . . . . . . . . . .                     e                                                            .   .   .   .   .   .   49      3.7.1 Oprateurs + et - . . . . . . . . . . . . . . . . . . . . . . .                e                                                                 .   .   .   .   .   .   49      3.7.2 Oprateurs ++ et -- . . . . . . . . . . . . . . . . . . . . .                e                                                                 .   .   .   .   .   .   49  3.8 Di rence de deux pointeurs . . . . . . . . . . . . . . . . . . . . .           e                                                                      .   .   .   .   .   .   50                                               iv                      http://krimo666.mylivepage.com/
3.9 Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                  .   .   .   50  3.10 Passage de param
tres . . . . . . . . . . . . . . . . . . . . . . . . . . .                         e                                                                                            .   .   .   52       3.10.1 Les besoins du programmeur . . . . . . . . . . . . . . . . . . .                                        .   .   .   52       3.10.2 Comment les langages de programmation satisfont ces besoins .                                           .   .   .   52       3.10.3 La stratgie du langage C . . . . . . . . . . . . . . . . . . . . .                       e                                                                                              .   .   .   52  3.11 Discussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                 .   .   .   53  3.12 Une derni
re prcision . . . . . . . . . . . . . . . . . . . . . . . . . . .                 e     e                                                                                              .   .   .   53  3.13 Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                 .   .   .   54  3.14 Lecture formatte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                       e                                                                                              .   .   .   56  3.15 Les derni
res instructions . . . . . . . . . . . . . . . . . . . . . . . . .                e                                                                                                     .   .   .   56       3.15.1 Instruction switch . . . . . . . . . . . . . . . . . . . . . . . . .                                    .   .   .   57       3.15.2 Instruction goto . . . . . . . . . . . . . . . . . . . . . . . . . .                                    .   .   .   59       3.15.3 Instruction nulle . . . . . . . . . . . . . . . . . . . . . . . . . .                                   .   .   .   59  3.16 Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                 .   .   .   60  3.17 Rcration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .         e e                                                                                                          .   .   .   634 Relations entre tableaux et pointeurs                                                                                           65  4.1    Conversion des tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                      .   65  4.2    Loprateur dindexation . . . . . . . . . . . . . . . . . . . . . . . . . . . .              e                                                                                                               .   66  4.3    Passage de tableau en param
tre . . . . . . . . . . . . . . . . . . . . . . .                                        e                                                                                     .   67  4.4    Modi cation des lments dun tableau pass en param
tre . . . . . . . .                           ee                            e            e                                                       .   68  4.5    Interdiction de modi cation des lments dun tableau pass en param
tre                                            ee                            e            e                                      .   69  4.6    Conversion des chanes littrales . . . . . . . . . . . . . . . . . . . . . . .                                      e                                                                                       .   69  4.7    Retour sur printf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                      .   70  4.8    Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                   .   70  4.9    Tableaux multidimensionnels . . . . . . . . . . . . . . . . . . . . . . . . .                                        .   72         4.9.1 Dclarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                   e                                                                                                          .   72         4.9.2 Acc
s aux lments . . . . . . . . . . . . . . . . . . . . . . . . . . .                      e     ee                                                                                                .   72         4.9.3 Passage en param
tre . . . . . . . . . . . . . . . . . . . . . . . . .                                    e                                                                                         .   72  4.10   Initialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                   .   73  4.11   Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                   .   73  4.12   Tableau de pointeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                     .   75         4.12.1 Cas gnral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                        ee                                                                                                    .   75         4.12.2 Tableaux de pointeurs vers des chanes . . . . . . . . . . . . . . . .                                        .   76         4.12.3 Param
tres dun programme . . . . . . . . . . . . . . . . . . . . .                        e                                                                                                     .   77  4.13   Tableau et pointeur, cest la meme chose? . . . . . . . . . . . . . . . . . .                                        .   78         4.13.1 Commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                        .   78         4.13.2 Cas particulier des chanes littrales . . . . . . . . . . . . . . . . .                                                  e                                                                           .   78  4.14   Rcration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .           e e                                                                                                                .   795 Les entres-sorties          e                                                                                                                       81  5.1 Pointeur invalide . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   81  5.2 Ouverture et fermeture de chiers . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   81      5.2.1 Ouverture dun chier : fopen . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   81      5.2.2 fermeture dun chier : fclose . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   83  5.3 Lecture et criture par caract
re sur chier                 e                  e                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   84      5.3.1 lecture par caract
re : fgetc . . . . .                               e                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   84                                               v                      http://krimo666.mylivepage.com/
5.3.2 lecture par caract
re : getc . . . . . . . . . . .                                   e                                   .   .   .   .   .   .   .   .   .   .   .   . 84        5.3.3 lecture par caract
re : getchar . . . . . . . . .                                   e                                   .   .   .   .   .   .   .   .   .   .   .   . 85        5.3.4 criture par caract
re : fputc . . . . . . . . . .               e                    e                                  .   .   .   .   .   .   .   .   .   .   .   . 85        5.3.5 criture par caract
re : putc . . . . . . . . . . .               e                    e                                  .   .   .   .   .   .   .   .   .   .   .   . 86        5.3.6 criture par caract
re : putchar . . . . . . . . .               e                    e                                  .   .   .   .   .   .   .   .   .   .   .   . 86  5.4   Lecture et criture par lignes sur chier . . . . . . . .                   e                                                   .   .   .   .   .   .   .   .   .   .   .   . 86        5.4.1 lecture par ligne : fgets . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   . 86        5.4.2 lecture par ligne : gets . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   . 87        5.4.3 criture par chane : fputs . . . . . . . . . . . .               e                                                       .   .   .   .   .   .   .   .   .   .   .   . 87        5.4.4 criture par chane : puts . . . . . . . . . . . .               e                                                       .   .   .   .   .   .   .   .   .   .   .   . 88  5.5   E S formattes sur chiers . . . . . . . . . . . . . . . .                     e                                                 .   .   .   .   .   .   .   .   .   .   .   . 89        5.5.1 E criture formatte : fprintf . . . . . . . . . .                                 e                                     .   .   .   .   .   .   .   .   .   .   .   . 89                       5.5.2 Ecriture formatte : printf . . . . . . . . . . .                                 e                                     .   .   .   .   .   .   .   .   .   .   .   . 92        5.5.3 E criture formatte dans une chane : sprintf .                                 e                                     .   .   .   .   .   .   .   .   .   .   .   . 93        5.5.4 Exemples dutilisation des formats . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   . 94        5.5.5 Entres formattes : fscanf . . . . . . . . . . .                    e           e                                      .   .   .   .   .   .   .   .   .   .   .   . 94        5.5.6 Entres formattes : scanf . . . . . . . . . . . .                    e           e                                      .   .   .   .   .   .   .   .   .   .   .   . 99        5.5.7 Entres formattes depuis une chane : sscanf .                    e           e                                      .   .   .   .   .   .   .   .   .   .   .   . 99  5.6   Rcration . . . . . . . . . . . . . . . . . . . . . . . . .          e e                                                          .   .   .   .   .   .   .   .   .   .   .   . 100  5.7   Exercice 1 . . . . . . . . . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   . 100  5.8   Exercice 2 . . . . . . . . . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   . 1006 Structures, unions et numrations                        e e                                                                                         103  6.1 Notion de structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                            . 103  6.2 Dclaration de structure . . . . . . . . . . . . . . . . . . . . . . . . . . . .         e                                                                                                         . 103  6.3 Oprateurs sur les structures . . . . . . . . . . . . . . . . . . . . . . . . .           e                                                                                                       . 105       6.3.1 Acc
s aux membres des structures . . . . . . . . . . . . . . . . . .                  e                                                                                                . 105       6.3.2 A ectation de structures . . . . . . . . . . . . . . . . . . . . . . . .                              . 105       6.3.3 Comparaison de structures . . . . . . . . . . . . . . . . . . . . . .                                 . 105  6.4 Tableaux de structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                             . 105  6.5 Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                           . 105  6.6 Pointeurs vers une structure . . . . . . . . . . . . . . . . . . . . . . . . . .                             . 107  6.7 Structures dont un des membres pointe vers une structure du meme type                                        . 107  6.8 Acc
s aux lments dune structure pointe . . . . . . . . . . . . . . . . .            e     ee                                e                                                              . 107  6.9 Passage de structures en param
tre . . . . . . . . . . . . . . . . . . . . . .                                         e                                                                         . 108  6.10 Dtermination de la taille alloue a un type . . . . . . . . . . . . . . . . .         e                               e
. 109       6.10.1 Retour sur la conversion des tableaux . . . . . . . . . . . . . . . .                                . 109  6.11 Allocation et libration despace pour les structures . . . . . . . . . . . . .                        e                                                                                          . 109       6.11.1 Allocation despace : fonctions malloc et calloc . . . . . . . . . .                                 . 109       6.11.2 Libration despace : procdure free . . . . . . . . . . . . . . . . . .                 e                         e                                                                       . 110  6.12 Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                          . 110  6.13 Les champs de bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                            . 114       6.13.1 Gnralits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                ee e                                                                                               . 114       6.13.2 Contraintes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                            . 115  6.14 Les numrations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .             e e                                                                                                   . 115  6.15 Les unions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                          . 116  6.16 Acc
s aux membres de lunion . . . . . . . . . . . . . . . . . . . . . . . . .            e                                                                                                      . 116                                              vi                     http://krimo666.mylivepage.com/
6.17 Utilisation pratique des unions . . . . . . . . . . . . . . . . . . . . . . . . . 116  6.18 Une mthode pour allger lacc
s aux membres . . . . . . . . . . . . . . . . 117              e              e        e7 Les expressions                                                                                                                 119  7.1 Les conversions de types . . . . . . . . . . . . . .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 119      7.1.1 Utilit des conversions . . . . . . . . . . .                   e                                                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 119      7.1.2 Ce quil y a dans une conversion . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 120      7.1.3 Lensemble des conversions possibles . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 120      7.1.4 Les situations de conversions . . . . . . .                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 121      7.1.5 La promotion des entiers . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 121      7.1.6 Les conversions arithmtiques habituelles                                       e                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 122      7.1.7 Les surprises des conversions . . . . . . .                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 123  7.2 Les oprateurs . . . . . . . . . . . . . . . . . . .            e                                                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 124      7.2.1 Oprateur non bit
bit . . . . . . . . . .                e                 a                                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 124      7.2.2 Oprateur et bit
bit . . . . . . . . . . .                e              a                                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 125      7.2.3 Oprateur ou bit
bit . . . . . . . . . . .                e               a                                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 125      7.2.4 Oprateur ou exclusif bit
bit . . . . . . .                e                        a                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 125      7.2.5 Oprateur dcalage
gauche . . . . . . .                e         e        a                                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 125      7.2.6 Oprateur dcalage
droite . . . . . . . .                e         e        a                                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 125      7.2.7 Oprateur conditionnel . . . . . . . . . .                e                                                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 126      7.2.8 Oprateur virgule . . . . . . . . . . . . . .                e                                                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 126      7.2.9 Oprateurs da ectation compose . . . .                e                                e                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 127  7.3 Oprateur conversion . . . . . . . . . . . . . . . .         e                                                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 127  7.4 Smantique des expressions . . . . . . . . . . . .       e                                                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 129      7.4.1 Oprateurs dadressage . . . . . . . . . .                e                                                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 129      7.4.2 Priorit et associativit des oprateurs . .                     e                e        e                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 129      7.4.3 Ordre dvaluation des oprandes . . . . .                       e                  e                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 131  7.5 Rcration . . . . . . . . . . . . . . . . . . . . . .        e e                                                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 1318 Le prprocesseur       e                                                                                                                          133  8.1 Traitement de macros . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 133      8.1.1 Les macros sans param
tres . . .                                       e             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 133      8.1.2 Macros prd nies . . . . . . . .                        ee                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 135      8.1.3 Les macros avec param
tres . . .                                       e             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 135      8.1.4 Les pi
ges des macros . . . . . .                    e                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 137      8.1.5 Macros gnrant des instructions                       ee                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 138  8.2 Compilation conditionnelle . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 139      8.2.1 Commande if . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 139      8.2.2 Commandes ifdef et ifndef .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 140      8.2.3 Loprateur defined . . . . . . .                  e                                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 140      8.2.4 La commande error . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 140      8.2.5 Usage . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 140  8.3 Rcration . . . . . . . . . . . . . . . . .        e e                                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 141                                            vii                    http://krimo666.mylivepage.com/
9 Les dclarations       e                                                                                                               143  9.1 Dclarations de d nition et de rfrence . . . . . . . . .         e               e                ee                                  .   .   .   .   .   .   .   .   .   .   . 143       9.1.1 Dclarations de variables . . . . . . . . . . . . .                 e                                                            .   .   .   .   .   .   .   .   .   .   . 144       9.1.2 Dclarations de fonctions . . . . . . . . . . . . .                 e                                                            .   .   .   .   .   .   .   .   .   .   . 144       9.1.3 Dclarations dtiquettes de structures et union .                 e            e                                               .   .   .   .   .   .   .   .   .   .   . 144  9.2 Porte des dclarations . . . . . . . . . . . . . . . . . . .            e       e                                                         .   .   .   .   .   .   .   .   .   .   . 145  9.3 Visibilit des identi cateurs . . . . . . . . . . . . . . . .                e                                                             .   .   .   .   .   .   .   .   .   .   . 146  9.4 Les espaces de noms . . . . . . . . . . . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   . 146       9.4.1 Position du probl
me . . . . . . . . . . . . . . . .                                 e                                            .   .   .   .   .   .   .   .   .   .   . 146       9.4.2 Les espaces de noms du langage C . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   . 147  9.5 Dure de vie . . . . . . . . . . . . . . . . . . . . . . . . .           e                                                                  .   .   .   .   .   .   .   .   .   .   . 148  9.6 Classes de mmoire . . . . . . . . . . . . . . . . . . . . .                    e                                                         .   .   .   .   .   .   .   .   .   .   . 149       9.6.1 Position du probl
me . . . . . . . . . . . . . . . .                                 e                                            .   .   .   .   .   .   .   .   .   .   . 149       9.6.2 Les spci cateurs de classe de mmoire . . . . . .                      e                           e                           .   .   .   .   .   .   .   .   .   .   . 150  9.7 La compilation spare . . . . . . . . . . . . . . . . . . .                        e e                                                   .   .   .   .   .   .   .   .   .   .   . 151       9.7.1 Gnralits . . . . . . . . . . . . . . . . . . . . .                  ee e                                                        .   .   .   .   .   .   .   .   .   .   . 151       9.7.2 La mthode du langage C . . . . . . . . . . . . .                    e                                                         .   .   .   .   .   .   .   .   .   .   . 152  9.8 D nition de types . . . . . . . . . . . . . . . . . . . . .         e                                                                    .   .   .   .   .   .   .   .   .   .   . 153  9.9 Utilit des typedef . . . . . . . . . . . . . . . . . . . . .              e                                                               .   .   .   .   .   .   .   .   .   .   . 153       9.9.1 Restriction dun type de base . . . . . . . . . . .              .   .   .   .   .   .   .   .   .   .   . 154       9.9.2 D nition de type structure . . . . . . . . . . . .                 e                                                            .   .   .   .   .   .   .   .   .   .   . 154       9.9.3 D nition de types opaques . . . . . . . . . . . .                 e                                                            .   .   .   .   .   .   .   .   .   .   . 155  9.10 Quali catifs de type . . . . . . . . . . . . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   . 155  9.11 Fonction a nombre variable de param
tres . . . . . . . .
e                              .   .   .   .   .   .   .   .   .   .   . 156       9.11.1 Exemple 1 . . . . . . . . . . . . . . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   . 157       9.11.2 Exemple 2 . . . . . . . . . . . . . . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   . 157  9.12 Syntaxe des dclarations . . . . . . . . . . . . . . . . . .                      e                                                       .   .   .   .   .   .   .   .   .   .   . 158  9.13 Smantique des dclarations . . . . . . . . . . . . . . . .        e                e                                                    .   .   .   .   .   .   .   .   .   .   . 161  9.14 Discussion sur les dclarations . . . . . . . . . . . . . . .                           e                                                  .   .   .   .   .   .   .   .   .   .   . 162  9.15 En pratique . . . . . . . . . . . . . . . . . . . . . . . . .          .   .   .   .   .   .   .   .   .   .   . 163  9.16 Un outil : cdecl . . . . . . . . . . . . . . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   . 16310 La biblioth
que standard              e                                                                                                        165  10.1   Diagnostic . . . . . . . . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   . 165  10.2   Manipulation de caract
res ctype.h . . . . . . . .                                 e                                    .   .   .   .   .   .   .   .   .   .   .   .   . 165  10.3   Environnement local locale.h . . . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   . 166  10.4   Mathmatiques math.h . . . . . . . . . . . . . . .               e                                                      .   .   .   .   .   .   .   .   .   .   .   .   . 166         10.4.1 Fonctions trigonomtriques et hyperboliques .                                     e                                .   .   .   .   .   .   .   .   .   .   .   .   . 166         10.4.2 Fonctions exponentielles et logarithmiques . .        .   .   .   .   .   .   .   .   .   .   .   .   . 166         10.4.3 Fonctions diverses . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   . 166  10.5   Branchements non locaux setjmp.h . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   . 166  10.6   Manipulation des signaux signal.h . . . . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   . 167  10.7   Nombre variable de param
tres stdarg.h . . . . .                                     e                                .   .   .   .   .   .   .   .   .   .   .   .   . 167  10.8   Entres sorties stdio.h . . . . . . . . . . . . . . .              e                                                       .   .   .   .   .   .   .   .   .   .   .   .   . 167         10.8.1 Oprations sur les chiers . . . . . . . . . . .                   e                                                  .   .   .   .   .   .   .   .   .   .   .   .   . 167         10.8.2 Acc
s aux chiers . . . . . . . . . . . . . . . .                    e                                                 .   .   .   .   .   .   .   .   .   .   .   .   . 167         10.8.3 Entres-sorties formattes . . . . . . . . . . .                     e                   e                            .   .   .   .   .   .   .   .   .   .   .   .   . 167                                              viii                      http://krimo666.mylivepage.com/
10.8.4 Entres-sorties caract
res . . . . . . . . .                    e                e                                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 168       10.8.5 Entres-sorties binaires . . . . . . . . . .                    e                                                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 168       10.8.6 Position dans un chier . . . . . . . . . .                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 168       10.8.7 Gestion des erreurs . . . . . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 168  10.9 Utilitaires divers stdlib.h . . . . . . . . . . .                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 168       10.9.1 Conversion de nombres . . . . . . . . . .                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 168       10.9.2 Gnration de nombres pseudo-alatoires                 ee                               e                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 169       10.9.3 gestion de la mmoire . . . . . . . . . . .                              e                                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 169       10.9.4 Communication avec lenvironnement . .                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 169       10.9.5 Recherche et tri . . . . . . . . . . . . . . .                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 169       10.9.6 Arithmtique sur les entiers . . . . . . . .                       e                                                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 169       10.9.7 Gestion des caract
res multi-octets . . . .                                 e                                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 169  10.10Manipulation de chanes string.h . . . . . . .                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 169  10.11Manipulation de la date et de lheure time.h .                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 170A Les jeux de caract
res                    e                                                                                                                  171  A.1 Les normes . . . . . . . . . . . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 171  A.2 Le code ascii . . . . . . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 172      A.2.1 Les codes ascii en octal . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 175      A.2.2 Les codes ascii en hexadcimal                                        e                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 175      A.2.3 Les codes ascii en dcimal . . .                                   e                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 176  A.3 Les codes ISO-Latin-1 . . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 177B Bibliographie                                                                                                                        179C Ressources Internet                                                                                                                  181D La grammaire                                                                                                                         183  D.1 Les units lexicales . . . . . . . . . .                e                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 183  D.2 Les mots-cls . . . . . . . . . . . . .                   e                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 183  D.3 Les identi cateurs . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 184  D.4 Les constantes . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 184  D.5 Les chanes littrales . . . . . . . . .                      e                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 186  D.6 Les oprateurs . . . . . . . . . . . .              e                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 186  D.7 La ponctuation . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 187  D.8 Nom de chier dinclusion . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 187  D.9 Les nombres du prprocesseur . . . .                          e                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 187  D.10 Les expressions . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 188  D.11 Les dclarations . . . . . . . . . . . .            e                                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 190  D.12 Les instructions . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 193  D.13 D nitions externes . . . . . . . . . .        e                                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 194  D.14 Directives du prprocesseur . . . . .                        e                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 194  D.15 Rfrences croises de la grammaire        ee             e                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 196                                            ix                    http://krimo666.mylivepage.com/
E Un bestiaire de types                                                                                                             199  E.1   Les types de base . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 199  E.2   Les tableaux . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 200  E.3   Les pointeurs . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 201  E.4   Les fonctions . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 201  E.5   Les numrations . . . . . . . . . . . . .            e e                                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 202  E.6   Les structures, unions et champs de bits       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 202  E.7   Les quali catifs . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 203F Le b^tisier      e                                                                                                                             205  F.1 Erreur avec les oprateurs . . . . . . . . . . . .                         e                                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 205      F.1.1 Erreur sur une comparaison . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 205      F.1.2 Erreur sur la ectation . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 205  F.2 Erreurs avec les macros . . . . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 206      F.2.1 Un define nest pas une dclaration .                                           e                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 206      F.2.2 Un define nest pas une initialisation                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 206      F.2.3 Erreur sur macro avec param
tres . . .                                             e                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 206      F.2.4 Erreur avec les e ets de bord . . . . . .                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 207  F.3 Erreurs avec linstruction if . . . . . . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 207  F.4 Erreurs avec les commentaires . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 207  F.5 Erreurs avec les priorits des oprateurs . . . .                              e        e                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 208  F.6 Erreur avec linstruction switch . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 208      F.6.1 Oubli du break . . . . . . . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 208      F.6.2 Erreur sur le default . . . . . . . . . .                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 208  F.7 Erreur sur les tableaux multidimensionnels . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 209  F.8 Erreur avec la compilation spare . . . . . . .                                   e e                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 209                                              x                     http://krimo666.mylivepage.com/
Avant-proposAu sujet de lauteur     Je suis ingnieur au cnrs et je travaille dans un laboratoire de recherche de luniver-                esit de Grenoble : le laboratoire clips http: www-clips.imag.fr. Toute noti cation   ederreur ou toute proposition damlioration de ce document sera la bienvenue
le-mail                                    e                                             aBernard.Cassagne@imag.fr.Au sujet de ce manuel    La littrature technique nous a habitu
deux styles dcriture de manuels : le style           e                                 ea                  e manuel de rfrence  et le style  guide de lutilisateur  Les manuels de rfrence se               ee                                                                     eedonnent comme buts detre exhaustifs et rigoureux. Les guides de lutilisateur se donnentcomme but detre didactiques. Cette partition vient du fait quil est quasiment impossiblesur des sujets complexes comme les langages de programmation detre
la fois rigoureux                                                                              aet didactique. Pour sen persuader il su t de lire le texte dune norme internationale.    Ce manuel se place dans la catgorie  guide de lutilisateur  : son but est de permettre                                   ea
une personne sachant programmer, dacqurir les lments fondamentaux du langage C.                                              e       eeCe manuel prsente donc chaque notion selon une gradation des di cults et ne cherche               e                                                                epas
etre exhaustif. Il comporte de nombreux exemples, ainsi que des exercices dont la    asolution se trouve dans le corps du texte, mais commence toujours sur une page di rente. eLe lecteur peut donc au choix, ne lire les solutions quapr
s avoir programm sa solution                                                              e                     epersonnelle, ou bien lire directement la solution comme si elle faisait partie du manuel.Les notions supposes connues du lecteur                  e    Les notions supposes connues du lecteur sont les concepts gnraux concernant les lan-                        e                                       eegages de programmation. En n du texte se trouve un glossaire qui regroupe des conceptsgnraux et certains concepts propres du langage C. En cas de rencontre dun mot inconnu, eele lecteur est invit
sy reporter.                    eaUn mot sur les probl
mes de traduction                    e   Le document de rfrence concernant le langage C est la norme ansi d nissant le                     ee                                                        elangage. Cest un document crit en anglais technique, ce qui pose des probl
mes de                               e                                                    etraduction : comment traduire les nologismes invents pour les besoins du langage? De                                    e                  emani
re
ne pas drouter les lecteurs franais, je me suis impos de respecter les choix de     e a          e                        c                     e                                               1                      http://krimo666.mylivepage.com/
traduction dun grand diteur 1 de livres techniques, meme quand je nai pas trouv ces                         e                                                               echoix tr
s heureux. Jai donc utilis dclarateur, initialisateur et spci cateur bien que me        e                             e e                              esemble-t-il, ils r^pent assez fort le palais quand on les prononce.                  aConventions syntaxiques    Les r
gles de grammaires qui sont donnes dans le corps de ce manuel sont simpli es         e                                    e                                         edans un but didactique par rapport
la grammaire o cielle du langage. Cependant, le                                         alecteur trouvera
lannexe D la grammaire sous une forme exhaustive et conforme
la                   a                                                                   anorme ansi. La typographie des r
gles suit les conventions suivantes :                                     e   1. les lments terminaux du langage seront crits dans une fonte
largeur constante,          ee                                     e                      a      comme ceci : while.   2. les lments non terminaux du langage seront crits en italique, comme ceci :          ee                                          e      instruction.   3. les r
gles de grammaires seront crites de la mani
re suivante :           e                            e                e            les parties gauches de r
gles seront seules sur leur ligne, cadres
gauche et                                      e                                     e a            suivies du signe deux points :.            les di rentes parties droites possibles seront introduites par le signe  et                    e            indentes sur la droite.                   e            Exemple :           instruction :                       if        expression        instruction 1                       if        expression        instruction 1    else   instruction 2           Ceci signi e quil y a deux mani
res possibles de driver le non-terminal ins-                                             e                    e           truction. La premi
re r
gle indique quon peut le driver en :                              e e                                e           if  expression  instruction 1           la deuxi
me r
gle indique quon peut aussi le driver en :                   e e                                       e           if  expression  instruction 1 else instruction 2           une partie droite de r
gle pourra etre crite sur plusieurs lignes. Ceci permettra                                 e                e           de r ter une mani
re possible de mettre en page le fragment de programme               ee               e           C correspondant, de faon
obtenir une bonne lisibilit.                                   c a                               e           Sans en changer la signi cation, lexemple prcdent aurait pu etre crit :                                                           ee                      e           instruction :                       if    expression                                                                       instruction 1                    if  expression                                    instruction 1                     else instruction 2  1. Cest masson qui a dit en franais 1 et 2 Cf. Bibliographie                        e e          c                                                  2                       http://krimo666.mylivepage.com/
les lments optionnels dune r
gle seront indiqus en mettant le mot  option               ee                         e                 e          en italique et dans une fonte plus petite
droite de llment concern.                                                      a             ee              e          Par exemple, la r
gle :                            e          dclarateur-init :           e                  dclarateur initialisateur option                       e          indique que dclarateur-init peut se driver soit en :                       e                        e          dclarateur initialisateur           e          soit en :          dclarateur           eRemerciements    Beaucoup de personnes mont aid
amliorer le manuscrit original en me signalant                                       ea ede nombreuses erreurs et en me proposant des amliorations. Quelles soient toutes remer-                                                  ecies de leurs lectures attentives et amicalement critiques, tout particuli
rement Damien  e                                                                        eGenthial, Fabienne Lagnier, Xavier Nicollin et Serge Rouveyrol.                                            3                      http://krimo666.mylivepage.com/
Chapitre 1Les bases    Le but de ce chapitre est de prsenter les lments de base du langage C, sous leur forme                                   e           eela plus simple. Arriv au bout du chapitre, le lecteur sera capable dcrire des programmes                     e                                                elmentaires.ee1.1 Les versions du langage C    Le langage C a subi au cours de son histoire deux grandes tapes de d nition. Il a                                                                    e          et d ni une premi
re fois par deux chercheurs des Laboratoires Bell, B. Kernighan et D.ee e                 eRitchie, dans un livre intitul  The C Programming Language , publi en 1978. Cette                               e                                            eversion est appele  Kernighan et Ritchie 78 , ou KR 78 en abrg, ou encore le plus                  e                                                    eesouvent, simplement KR.    Suite
lextraordinaire succ
s dunix, qui induisit le succ
s du langage C, la situation          a                      e                              edevint confuse : plusieurs fournisseurs de compilateurs mirent sur le march des compi-                                                                               e                                                                           e
lateurs non conformes
KR car comportant des extensions particuli
res. A la n des                         aannes 80, il devint ncessaire de mettre de lordre dans ce chaos et donc de normaliser    e                  ele langage, t^che
laquelle sattela lansi 1, organisme de normalisation amricain. La              a a                                                                 enorme ansi fut termine en 1989. En 1990, liso 2 , organisme de normalisation interna-                         etional, donc chapeautant lansi, adopta tel quel le standard ansi en tant que standardiso.    Cette seconde version du langage C devrait donc sappeler iso c, mais comme lesacteurs importants du monde informatique sont de culture anglo-saxonne et que ceux-cipersistent
lappeler ansi c, presque? tout le monde fait de meme. Dans ce manuel,            anous suivrons lusage gnral, et utiliserons lexpression ansi c pour dsigner la norme                         ee                                                 ecommune
lansi et liso.           a    Ce document dcrit C ansi, avec parfois des rfrences
C KR, de mani
re
per-                    e                               ee         a                    e amettre au lecteur de comprendre les sources crits avant lapparition de la norme.                                               e1.2 Langage et biblioth
que standard                       e   Le langage C a t conu pour lcriture de syst
mes, en particulier le syst
me unix.                    ee c             e               e                           ePour cette raison, ses concepteurs ont fait une sparation nette entre ce qui est purement                                                 e  1. American National Standards Institute  2. International Standards Organization                                             5                       http://krimo666.mylivepage.com/
algorithmique dclarations, instructions, etc. et tout ce qui est interaction avec le sys-                   et
me entres sorties, allocation de mmoire, etc. qui est ralis par appel de fonctions e          e                          e                      e ese trouvant dans une biblioth
que dite biblioth
que standard. Cette coupure se retrouve                               e                 edans la norme qui est compose essentiellement de deux grands chapitres, les chapitres                                e langage  et  biblioth
que  .                      e     Ce manuel se donne comme objectif de donner une vue densemble du langage, mais pasde la biblioth
que standard. De la biblioth
que standard ne seront prsentes de mani
re               e                            e                           e e              ecompl
te que les fonctions permettant de raliser les entres-sorties et la gestion mmoire.       e                                    e             e                          eCependant, la liste exhaustive des noms des fonctions de la biblioth
que, classs par type                                                                      e           edutilisation, est donne dans le chapitre 10.                       e1.3 Les phases de compilationLes compilateurs C font subir deux transformations aux programmes :  1. un prprocesseur ralise des transformations dordre purement textuel, pour rendre          e            e     des services du type inclusion de source, compilation conditionnelle, et traitement     de macros ;  2. le compilateur proprement dit prend le texte gnr par le prprocesseur et le traduit                                                   e ee           e     en instructions machine.   La fonction de prprocesseur est assez souvent implmente par un programme spar                    e                                 e    e                    e ecpp sous unix qui est automatiquement appel par le compilateur.                                               e1.4 Les jeux de caract
res                      e    Le lecteur non familiaris avec les probl
mes de codage de caract
res peut se reporter                             e               e                         ea
lannexe A, o
ces probl
mes sont dvelopps.                 u         e            e      e    Le langage C nimpose pas un jeu de caract
res particulier. Par contre tout le langage                                                 emots-cls, oprateurs, etc. est d ni en utilisant les caract
res ascii. Meme les identi -         e e                       e                           ecateurs doivent etre crits avec lalphabet anglais. Par contre, le jeu de caract
res utilis                      e                                                          e          epour les constantes caract
re, les chanes de caract
res et les commentaires est dpendant                           e                         e                             ede limplmentation.          e    Pendant tr
s longtemps les programmeurs non anglophones ont utilis lascii faute de                e                                                           emieux, pour programmer en C. Actuellement, si on est dans le monde unix, il ne doitpas y avoir de probl
me pour disposer dun environnement de travail la fenetre, le shell,                     elditeur, le compilateur enti
rement
la norme iso-8859. Dans ce manuel, on suppose  e                             e        aque le lecteur dispose dun tel environnement : les exemples donns sont crits en iso-8859.                                                                   e       e1.5 Les units lexicales            e   Le langage comprends 6 types dunits lexicales : les mots-cls, les identi cateurs, les                                           e                       econstantes, les chanes, les oprateurs et les signes de ponctuation.                               e                                             6                      http://krimo666.mylivepage.com/
1.5.1 Les mots-cls                 e    Le langage C est un langage
mots-cls, ce qui signi e quun certain nombre de                                    a        emots sont rservs pour le langage lui-meme et ne peuvent donc pas etre utiliss comme           e e                                                                eidenti cateurs. La liste exhaustive des mots-cls est la suivante :                                               e           auto               double               int                struct           break              else                 long               switch           case               enum                 register           typedef           char               extern               return             union           const              float                short              unsigned           continue           for                  signed             void           default            goto                 sizeof             volatile           do                 if                   static             whileAttention    Si le compilateur produit un message derreur syntaxique incomprhensible il est re-                                                                        ecommand davoir le r exe de consulter la liste des mots cls pour vri er que lon a pas           e          e                                      e        epris comme identi cateur un mot-cl. Si le lecteur dsire etre convaincu, il lui est suggr                                  e                 e                                    eede donner le nom long
une variable enti
re.                        a                 e1.5.2 Les identi cateurs    Le but dun identi cateur est de donner un nom
une entit du programme variable,                                                       a          eprocdure, etc. Les identi cateurs sont forms dune suite de lettres, de chi res et du signe     e                                         esoulign, suite dont le premier caract
re ne peut pas etre un chi re. Les lettres formant         e                              eles identi cateurs peuvent etre majuscules ou minuscules, mais doivent faire partie delalphabet anglais : les lettres accentues sont interdites. Les noms var1, PremierIndex,                                        ei_tab, _deb sont des identi cateurs valides, mais 1i et i:j ne le sont pas.    Un compilateur a le droit de tronquer les identi cateurs internes ceux qui ne sont pasexports
un diteur de liens au del
dune certaine longueur. Cette limite dpend de        e a e                            a                                          elimplmentation, mais ne doit pas etre infrieure
31 caract
res.       e                                     e       a          e    De la meme mani
re, les identi cateurs externes exports
un diteur de liens pour-                       e                                      e a eront etre tronqus au del
dune certaine longueur. Cette limite est gnralement plus                  e         a                                               eesv
re, mais ne peut etre infrieure
6 caract
res. De surcrot, la distinction entre minus- ee                            e      a          ecules et majuscules nest pas garantie au contraire des noms internes, pour lesquels cettedistinction est garantie.1.6 Les commentaires      Syntaxe :      Les commentaires dbutent par                        e                *   et se terminent par * . Exemple :       *    Ceci est un commentaire           *      Toute occurrence de * est interprte comme le dbut dun commentaire sauf dans                                        ee             e      une chane littrale, ou un commentaire les commentaires ne peuvent donc pas etre                     e      imbriqus.             e                                               7                      http://krimo666.mylivepage.com/
Recommandations :   Dans le domaine gnral de la programmation, pas seulement le langage C, il est                        ee   admis quil faille commenter selon les niveaux suivants :       unit de compilation : pour indiquer le nom de lauteur, les droits de copyright,            e       la date de cration, les dates et auteurs des di rentes modi cations, ainsi que                      e                                 e       la raison detre de lunit ;                                 e       procdure : pour indiquer les param
tres et la raison detre de la procdure ;            e                                e                                 e       groupe dintructions : pour exprimer ce que ralise une fraction signi cative                                                        e       dune procdure ;                    e       dclaration ou instruction : le plus bas niveau de commentaire.         e   Pour le niveau unit de compilation, voici un exemple tir du source de perl :                        e                                    e     *     *     Copyright c 1991, Larry Wall     *     *     You may distribute under the terms of either the GNU General Public     *     License or the Artistic License, as specified in the README file.     *     *   $Log: perl.c,v $     *   Revision 4.0.1.8 1993 02 05 19:39:30 lwall     *   Revision 4.0.1.7 92 06 08 14:50:39 lwall     *   Revision 4.0.1.3 91 06 07 11:40:18 lwall     *   Revision 4.0.1.2 91 06 07 11:26:16 lwall     *   Revision 4.0.1.1 91 04 11 17:49:05 lwall     *   Revision 4.0 91 03 20 01:37:44 lwall     *   4.0 baseline.     *     *   Pour le niveau de la procdure, je trouve agrable de raliser des esp
ces de car-                            e                   e           e              e   touches permettant de dcouper visuellement un listing en ses di rentes procdures,                          e                                         e           e   comme ceci par exemple :     ******************************************************************************     *                                                                            *     *                                strcpy                                      *     *                                                                            *     *   But:                                                                     *     *      copie une cha^ne dans une autre                                                                                 *     *                                                                            *     *   Interface:                                                               *     *      s1 : cha^ne destination                                                                                 *     *      s2 : cha^ne source                                                                                 *     *                                                                            *     ******************************************************************************   En ce qui concerne le niveau groupe dinstruction, il est classique de faire une mise   en page comme dans lexemple suivant tir du source de dvips 3 :                                            e     *3. dvips est un traducteur en PostScript du format gnr par TeX                                                    e ee                                               8                     http://krimo666.mylivepage.com/
*     If nothing above worked, then we get desperate. We attempt to        *     open the stupid font at one of a small set of predefined sizes,        *     and then use PostScript scaling to generate the correct size.        *        *     We much prefer scaling up to scaling down, since scaling down        *     can omit character features, so we try the larger sizes first,        *     and then work down.        *       Pour le niveau dclaration ou instruction, on commentera sur la meme ligne. Exemple                       e       tir du source du compilateur gnu cc :          e       char *name;                                  * Function unit name. *       struct function_unit *next;                  * Next function unit. *       int multiplicity;                            * Number of units of this type. *       int simultaneity;                            * Maximum number of simultaneous insns                                                      on this function unit or 0 if unlimited.                   *       struct range ready_cost;                     * Range of ready cost values. *       struct range issue_delay;                    * Range of issue delay values. *Attention       Lerreur classique avec les commentaires est doublier la squence fermante * . Dans                                                                  e       ce cas, le compilateur va considrer que le commentaire se poursuit jusqu
la n du                                       e                                         a       prochain commentaire et ceci peut ne pas gnrer derreur syntaxique.                                                    ee       Exemple :       instruction        *     premier commentaire       instruction       ...       instruction        *     second commentaire             *       instruction       On voit que dans ce cas, tout un ensemble dinstructions sera ignor par le compila-                                                                          e       teur sans gnrer le moindre message derreur                   ee                                4.       Un commentaire ne peut pas contenir un commentaire, il nest donc pas possible de       mettre en commentaire un morceau de programme comportant dj
des commen-                                                                       ea       taires 5.   4. Dans 5 , Peter Van der Linden donne un exemple amusant de ce bug. Dans un compilateur, le cacit      ede lalgorithme de hachage de la table des identi cateurs dpendait de la bonne initialisation dune variable.                                                             eDans le code initial, linitialisation avait t mise involontairement dans un commentaire provoquant une                                             eeinitialisation par dfaut
zro. La simple correction du bug, t gagner 15 de cacit au compilateur !                    e a e                                                                 e   5. Voir cependant F.4                                                      9                          http://krimo666.mylivepage.com/
1.7 Les types de base1.7.1 Les caract
res                e    Le mot-cl dsignant les caract
res est char. Un objet de ce type doit pouvoir contenir             e e                   ele code de nimporte quel caract
re de lensemble des caract
res utilis sur la machine.                                  e                             e        eLe codage des caract
res nest pas d ni par le langage : cest un choix dimplmentation.                     e               e                                         eCependant, dans la grande majorit des cas, le code utilis est le code dit ascii, ou un                                     e                       esurensemble comme par exemple la norme iso-8859.Attention    Le type caract
re est original par rapport
ce qui se fait habituellement dans les                   e                           alangages de programmation. La norme prcise clairement quun objet de type caract
re                                           e                                          epeut etre utilis dans toute expression o
un objet de type entier peut etre utilis. Par                e                         u                                        eexemple, si c est de type char, il est valide dcrire c + 1 : cela donnera le caract
re                                                e                                     esuivant dans le code utilis sur la machine.                           e1.7.2 Les entiers    Le mot cl dsignant les entiers est int. Les entiers peuvent etre a ects de deux types              e e                                                            edattributs : un attribut de prcision et un attribut de reprsentation.                                e                            e    Les attributs de prcision sont short et long. Du point de vue de la prcision, on peut                        e                                                     eavoir trois types dentiers : short int, int et long int. Les int sont implments sur ce                                                                                e   equi est un mot  naturel  de la machine. Les long int sont implments si possible plus                                                                     e     egrands que les int, sinon comme des int. Les short int sont implments si possible                                                                         e        eplus courts que les int, sinon comme des int. Les implmentations classiques mettent les                                                          eshort int sur 16 bits, les long int sur 32 bits, et les int sur 16 ou 32 bits selon ce quiest le plus e cace.    Lattribut de reprsentation est unsigned. Du point de vue de la reprsentation, on                       e                                                        epeut avoir deux types dentiers : int et unsigned int. Les int permettent de contenirdes entiers signs, tr
s gnralement en reprsentation en complment
2, bien que cela                e e ee                         e                   e       ane soit pas impos par le langage. Les unsigned int permettent de contenir des entiers                   enon signs en reprsentation binaire.         e          e    On peut combiner attribut de prcision et attribut de reprsentation et avoir par                                         e                           eexemple un unsigned long int. En rsum, on dispose donc de six types dentiers :                                           e eint, short int, long int tous trois signs et unsigned int, unsigned short int                                               eet unsigned long int.1.7.3 Les ottants    Il existe trois types de ottants correspondants
trois prcisions possibles. En allant                                                     a        ede la prcision la plus faible vers la plus forte, on dispose des types float, double et         elong double. La prcision e ectivement utilise pour chacun de ces types dpend de                       e                         e                                elimplmentation.       e                                            10                     http://krimo666.mylivepage.com/
1.8 Les constantes1.8.1 Les constantes enti
res                         e     Syntaxe :     On dispose de 3 notations pour les constantes enti
res : dcimale, octale et hexad-                                                       e       e                       e     cimale.     Les constantes dcimales scrivent de la mani
re usuelle ex : 372. Les constantes                      e          e                    e     octales doivent commencer par un zro et ne comporter que des chi res octaux                                            e     ex : 0477. Les constantes hexadcimales doivent commencer par 0x ou 0X et etre                                        e     composes des chi res de 0
9, ainsi que des lettres de a
f sous leur forme majuscule             e                  a                               a     ou minuscule ex : 0x5a2b, 0X5a2b, 0x5A2B.     Une constante enti
re peut etre su xe par la lettre u ou U pour indiquer quelle                         e                   e     doit etre interprte comme tant non signe. Elle peut galement etre su xe par                      ee          e               e             e               e     la lettre l ou L pour lui donner lattribut de prcision long.                                                      e     Smantique :      e     Le type dune constante enti
re est le premier type, choisi dans une liste de types,                                 e     permettant de reprsenter la constante :                       e      forme de la constante              liste de types      pas de su xe, dcimal                      e                  int, long int, unsigned long int      pas de su xe, octal ou hexadcimal int, unsigned int, long int, unsigned                                   e                                                       long int      su x par u ou U           e                             unsigned int, unsigned long int      su x par l ou L           e                             long int, unsigned long int      su x par u ou U et l ou L           e                             unsigned long intAttention   Ces conventions dcriture des constantes ne respectent pas lcriture mathmatique,                     e                                            e           epuisque 010 devant etre interprt en octal, nest pas gal
10.                               ee                      e a1.8.2 Les constantes caract
res                           e     Syntaxe :     Une constante caract
re scrit entoure du signe . La r
gle gnrale consiste
crire                           e e             e                  e ee                   ae     le caract
re entour du signe  ; par exemple, la constante caract
re correspondant              e         e                                                e     au caract
re g scrit g.               e      e                                            11                     http://krimo666.mylivepage.com/
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C
Introduction Langage C

Contenu connexe

En vedette

Anexo billetarjet edward final.refinal billetarjet libres dra mezcaline
Anexo billetarjet edward final.refinal billetarjet libres dra mezcalineAnexo billetarjet edward final.refinal billetarjet libres dra mezcaline
Anexo billetarjet edward final.refinal billetarjet libres dra mezcalineAMA.RILLO (MXP.LAB)
 
Tremblement de terre
Tremblement de terreTremblement de terre
Tremblement de terreGuiBou0136
 
Du c t- du cdi 14 6janv
Du c t- du cdi 14 6janvDu c t- du cdi 14 6janv
Du c t- du cdi 14 6janvClaudie Merlet
 
___ - _____ - ______ _______ - ____÷__
  ___ - _____ - ______ _______ - ____÷__  ___ - _____ - ______ _______ - ____÷__
___ - _____ - ______ _______ - ____÷__Girishnath Trivedi
 
Ch7 Pronominal Verbs
Ch7 Pronominal VerbsCh7 Pronominal Verbs
Ch7 Pronominal VerbsMmeBosch
 
A - Adopter l’agilité – Enjeux, bénéfices et plus
A - Adopter l’agilité – Enjeux, bénéfices et plusA - Adopter l’agilité – Enjeux, bénéfices et plus
A - Adopter l’agilité – Enjeux, bénéfices et plusXP Day CH
 
Performance d'un site Internet
Performance d'un site InternetPerformance d'un site Internet
Performance d'un site InternetVaisonet
 
Diccionario multimedial didáctico
Diccionario multimedial didácticoDiccionario multimedial didáctico
Diccionario multimedial didácticoMariluz Ascuntar
 
Le financement immobilier murabaha en 7 points !
Le financement immobilier murabaha en 7 points !Le financement immobilier murabaha en 7 points !
Le financement immobilier murabaha en 7 points !570 easi
 
Neotion Box 3000 Skybox
Neotion Box 3000 SkyboxNeotion Box 3000 Skybox
Neotion Box 3000 SkyboxSais Abdelkrim
 
Comparación entre procesos de Administración y Supervisión del Currículo en d...
Comparación entre procesos de Administración y Supervisión del Currículo en d...Comparación entre procesos de Administración y Supervisión del Currículo en d...
Comparación entre procesos de Administración y Supervisión del Currículo en d...Julio Marín
 
Veille strategique en_entreprise_multinationale_une_etude_de_cas_aupres_de_la...
Veille strategique en_entreprise_multinationale_une_etude_de_cas_aupres_de_la...Veille strategique en_entreprise_multinationale_une_etude_de_cas_aupres_de_la...
Veille strategique en_entreprise_multinationale_une_etude_de_cas_aupres_de_la...SI Encgc
 
Cap com2011 q-rcodes-briolais
Cap com2011 q-rcodes-briolaisCap com2011 q-rcodes-briolais
Cap com2011 q-rcodes-briolaisCap'Com
 
Dictamen blog quarta entrada
Dictamen blog quarta entradaDictamen blog quarta entrada
Dictamen blog quarta entradaRu Rug
 
Talents
TalentsTalents
Talents4Front
 
La veille de red guy du 03.10.12 les directeurs artistiques
La veille de red guy du 03.10.12   les directeurs artistiquesLa veille de red guy du 03.10.12   les directeurs artistiques
La veille de red guy du 03.10.12 les directeurs artistiquesRed Guy
 
COMPONENTES DE LA COMPUTADORA
COMPONENTES DE LA COMPUTADORACOMPONENTES DE LA COMPUTADORA
COMPONENTES DE LA COMPUTADORACarlos Villamar
 

En vedette (20)

Anexo billetarjet edward final.refinal billetarjet libres dra mezcaline
Anexo billetarjet edward final.refinal billetarjet libres dra mezcalineAnexo billetarjet edward final.refinal billetarjet libres dra mezcaline
Anexo billetarjet edward final.refinal billetarjet libres dra mezcaline
 
Tremblement de terre
Tremblement de terreTremblement de terre
Tremblement de terre
 
Stephanie
StephanieStephanie
Stephanie
 
Du c t- du cdi 14 6janv
Du c t- du cdi 14 6janvDu c t- du cdi 14 6janv
Du c t- du cdi 14 6janv
 
___ - _____ - ______ _______ - ____÷__
  ___ - _____ - ______ _______ - ____÷__  ___ - _____ - ______ _______ - ____÷__
___ - _____ - ______ _______ - ____÷__
 
Ch7 Pronominal Verbs
Ch7 Pronominal VerbsCh7 Pronominal Verbs
Ch7 Pronominal Verbs
 
A - Adopter l’agilité – Enjeux, bénéfices et plus
A - Adopter l’agilité – Enjeux, bénéfices et plusA - Adopter l’agilité – Enjeux, bénéfices et plus
A - Adopter l’agilité – Enjeux, bénéfices et plus
 
Performance d'un site Internet
Performance d'un site InternetPerformance d'un site Internet
Performance d'un site Internet
 
Estadistica
EstadisticaEstadistica
Estadistica
 
Diccionario multimedial didáctico
Diccionario multimedial didácticoDiccionario multimedial didáctico
Diccionario multimedial didáctico
 
Le financement immobilier murabaha en 7 points !
Le financement immobilier murabaha en 7 points !Le financement immobilier murabaha en 7 points !
Le financement immobilier murabaha en 7 points !
 
Neotion Box 3000 Skybox
Neotion Box 3000 SkyboxNeotion Box 3000 Skybox
Neotion Box 3000 Skybox
 
Comparación entre procesos de Administración y Supervisión del Currículo en d...
Comparación entre procesos de Administración y Supervisión del Currículo en d...Comparación entre procesos de Administración y Supervisión del Currículo en d...
Comparación entre procesos de Administración y Supervisión del Currículo en d...
 
Veille strategique en_entreprise_multinationale_une_etude_de_cas_aupres_de_la...
Veille strategique en_entreprise_multinationale_une_etude_de_cas_aupres_de_la...Veille strategique en_entreprise_multinationale_une_etude_de_cas_aupres_de_la...
Veille strategique en_entreprise_multinationale_une_etude_de_cas_aupres_de_la...
 
Cap com2011 q-rcodes-briolais
Cap com2011 q-rcodes-briolaisCap com2011 q-rcodes-briolais
Cap com2011 q-rcodes-briolais
 
Dictamen blog quarta entrada
Dictamen blog quarta entradaDictamen blog quarta entrada
Dictamen blog quarta entrada
 
Talents
TalentsTalents
Talents
 
Psp Tsp Agile 3 1 Fr
Psp Tsp Agile 3 1 FrPsp Tsp Agile 3 1 Fr
Psp Tsp Agile 3 1 Fr
 
La veille de red guy du 03.10.12 les directeurs artistiques
La veille de red guy du 03.10.12   les directeurs artistiquesLa veille de red guy du 03.10.12   les directeurs artistiques
La veille de red guy du 03.10.12 les directeurs artistiques
 
COMPONENTES DE LA COMPUTADORA
COMPONENTES DE LA COMPUTADORACOMPONENTES DE LA COMPUTADORA
COMPONENTES DE LA COMPUTADORA
 

Dernier

SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSKennel
 
Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Gilles Le Page
 
Evaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. MarocpptxEvaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. MarocpptxAsmaa105193
 
Formation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipFormation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipM2i Formation
 
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSKennel
 
Cours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETCours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETMedBechir
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeXL Groupe
 
Principe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsPrincipe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsRajiAbdelghani
 
Présentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptxPrésentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptxrababouerdighi
 
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETMedBechir
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .Txaruka
 
presentation sur la maladie de la dengue .pptx
presentation sur la maladie de la dengue .pptxpresentation sur la maladie de la dengue .pptx
presentation sur la maladie de la dengue .pptxNYTombaye
 
Saint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptxSaint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptxMartin M Flynn
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptxTxaruka
 
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSKennel
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...Faga1939
 
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSKennel
 
le present des verbes reguliers -er.pptx
le present des verbes reguliers -er.pptxle present des verbes reguliers -er.pptx
le present des verbes reguliers -er.pptxmmatar2
 

Dernier (20)

SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
 
DO PALÁCIO À ASSEMBLEIA .
DO PALÁCIO À ASSEMBLEIA                 .DO PALÁCIO À ASSEMBLEIA                 .
DO PALÁCIO À ASSEMBLEIA .
 
Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024
 
Evaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. MarocpptxEvaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. Marocpptx
 
Formation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipFormation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadership
 
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
 
Cours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETCours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSET
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directe
 
Principe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsPrincipe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 temps
 
Présentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptxPrésentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptx
 
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
 
Pâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie PelletierPâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie Pelletier
 
presentation sur la maladie de la dengue .pptx
presentation sur la maladie de la dengue .pptxpresentation sur la maladie de la dengue .pptx
presentation sur la maladie de la dengue .pptx
 
Saint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptxSaint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptx
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptx
 
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
 
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
 
le present des verbes reguliers -er.pptx
le present des verbes reguliers -er.pptxle present des verbes reguliers -er.pptx
le present des verbes reguliers -er.pptx
 

Introduction Langage C

  • 1. INTRODUCTION AU LANGAGE C char rahc [ ] = "n/" , redivider [ ] = "Able was I ere I saw elbA" , C * deliver,reviled = 1+1 , niam ; main ( ) {/*} */ int tni = 0x0 , rahctup,putchar ( ) ,LACEDx0 = 0xDECAL, rof ; for (;(int) (tni);) (int) (tni) = reviled ; deliver = redivider ; for ((int)(tni)++,++reviled;reviled* *deliver;deliver++,++(int)(tni)) rof = (int) -1- (tni) ;reviled--;--deliver; (tni) = (int) - 0xDECAL + LACEDx0 - rof ; for (reviled--,(int)--(tni);(int) (tni);(int)--(tni),--deliver) rahctup = putchar (reviled* *deliver) ; rahctup * putchar ((char) * (rahc)) ; /* {*/}Bernard Cassagne http://krimo666.mylivepage.com/
  • 2. Bernard CassagneIntroduction au langage C norme iso ansi Laboratoire clips Universit Joseph Fourier & cnrs e Grenoble http://krimo666.mylivepage.com/
  • 3. Copyright 1997-1998 Bernard CassagneCe texte est copyright et nest pas dans le domaine public. Sa reproduction est cependant eautorise a condition de respecter les conditions suivantes : e
  • 4. Si ce document est reproduit pour les besoins personnels du reproducteur, toute forme de reproduction totale ou partielle est autorise. e Si ce document est reproduit dans le but detre distribu
  • 5. de tierces personnes : ea il devra etre reproduit dans son intgralit sans aucune modi cation. Cette e e notice de copyright devra donc etre prsente. e il ne devra pas etre vendu. Cependant, dans le seul cas dun enseignement gratuit, une participation aux frais de reproduction pourra etre demande, mais e elle ne pourra etre suprieure au prix du papier et de lencre composant le e document.Toute reproduction sortant du cadre prcis ci-dessus est interdite sans accord pralable e e ede lauteur. Un chier PostScript contenant ce document est librement accessible par lurl :ftp: ftp.imag.fr pub DOC.UNIX C Introduction ANSI C.psVersion de ce document : 2.1 de juin 1998 http://krimo666.mylivepage.com/
  • 7. res e1 Les bases 5 1.1 Les versions du langage C . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2 Langage et biblioth
  • 8. que standard . . . . . . . . e . . . . . . . . . . . . . . . . 5 1.3 Les phases de compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.4 Les jeux de caract
  • 9. res . . . . . . . . . . . . . . e . . . . . . . . . . . . . . . . 6 1.5 Les units lexicales . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . . . 6 1.5.1 Les mots-cls . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . . . 7 1.5.2 Les identi cateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.6 Les commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.7 Les types de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.7.1 Les caract
  • 10. res . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . . . 10 1.7.2 Les entiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.7.3 Les ottants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.8 Les constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.8.1 Les constantes enti
  • 11. res . . . . . . . . . . e . . . . . . . . . . . . . . . . 11 1.8.2 Les constantes caract
  • 12. res . . . . . . . . e . . . . . . . . . . . . . . . . 11 1.8.3 Les constantes ottantes . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.9 Les chanes de caract
  • 13. res littrales . . . . . . . e e . . . . . . . . . . . . . . . . 14 1.10 Les constantes nommes . . . . . . . . . . . . . e . . . . . . . . . . . . . . . . 14 1.10.1 Les de ne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.10.2 Les numrations . . . . . . . . . . . . . e e . . . . . . . . . . . . . . . . 15 1.11 Dclarations de variables ayant un type de base e . . . . . . . . . . . . . . . . 16 1.12 Les oprateurs les plus usuels . . . . . . . . . . e . . . . . . . . . . . . . . . . 16 1.12.1 La ectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.12.2 Laddition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.12.3 La soustraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.12.4 La multiplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.12.5 La division . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.12.6 Loprateur modulo . . . . . . . . . . . e . . . . . . . . . . . . . . . . 18 1.12.7 Les oprateurs de comparaison . . . . . e . . . . . . . . . . . . . . . . 19 1.13 Les instructions les plus usuelles . . . . . . . . . . . . . . . . . . . . . . . . 19 1.13.1 Instruction expression . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.13.2 Instruction compose . . . . . . . . . . . e . . . . . . . . . . . . . . . . 20 1.13.3 Instruction if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 1.14 Inclusion de source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.15 Les procdures et les fonctions . . . . . . . . . e . . . . . . . . . . . . . . . . 22 iii http://krimo666.mylivepage.com/
  • 14. 1.15.1 D nition dune fonction . . . . . . . . . . . . . . . . . . . e . . . . . 22 1.15.2 Appel dune fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 1.15.3 Les procdures . . . . . . . . . . . . . . . . . . . . . . . . . e . . . . . 25 1.15.4 Fonctions imbriques . . . . . . . . . . . . . . . . . . . . . . e . . . . . 25 1.15.5 Rcursivit . . . . . . . . . . . . . . . . . . . . . . . . . . . e e . . . . . 25 1.15.6 Rfrence
  • 15. une fonction externe . . . . . . . . . . . . . . . ee a . . . . . 26 1.15.7 Comprendre la documentation de la biblioth
  • 16. que standard . e . . . . . 26 1.15.8 Les fonctions dans le style KR . . . . . . . . . . . . . . . . . . . . 26 1.16 Impression formatte . . . . . . . . . . . . . . . . . . . . . . . . . . e . . . . . 27 1.17 Structure dun programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 1.18 Terminaison dun programme . . . . . . . . . . . . . . . . . . . . . . . . . . 29 1.19 Mise en oeuvre du compilateur C sous UNIX . . . . . . . . . . . . . . . . . 29 1.20 Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 1.21 Rcration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e e . . . . . 332 Les tableaux 35 2.1 Les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.1.1 Dclaration de tableaux dont les lments ont un type de base e ee . . . 35 2.1.2 Initialisation dun tableau . . . . . . . . . . . . . . . . . . . . . . . . 36 2.1.3 Rfrence
  • 17. un lment dun tableau . . . . . . . . . . . . . . . ee a ee . . . 37 2.1.4 Chanes et tableaux de caract
  • 18. res . . . . . . . . . . . . . . . . . e . . . 37 2.2 Les instructions itratives . . . . . . . . . . . . . . . . . . . . . . . . . e . . . 37 2.2.1 Instruction for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.2.2 Instruction while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.2.3 Instruction do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 2.2.4 Instruction break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 2.2.5 Instruction continue . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.3 Les oprateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . . . 40 2.3.1 Oprateur pr et postincrment . . . . . . . . . . . . . . . . . . e e e . . . 40 2.3.2 Oprateur pr et postdcrment . . . . . . . . . . . . . . . . . e e e e . . . 41 2.3.3 Quelques utilisations typiques de ces oprateurs . . . . . . . . . e . . . 41 2.3.4 Oprateur et logique . . . . . . . . . . . . . . . . . . . . . . . . e . . . 42 2.3.5 Oprateur ou logique . . . . . . . . . . . . . . . . . . . . . . . . e . . . 42 2.3.6 Oprateur non logique . . . . . . . . . . . . . . . . . . . . . . . e . . . 43 2.4 Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433 Les pointeurs 45 3.1 Notion de pointeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.2 Dclarations de variables de type pointeur vers les types de base e . . . . . . 45 3.3 Type de pointeur gnrique . . . . . . . . . . . . . . . . . . . . . ee . . . . . . 45 3.4 Oprateur adresse de . . . . . . . . . . . . . . . . . . . . . . . . . e . . . . . . 46 3.5 Oprateur dindirection . . . . . . . . . . . . . . . . . . . . . . . e . . . . . . 46 3.6 Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.7 Pointeurs et oprateurs additifs . . . . . . . . . . . . . . . . . . . e . . . . . . 49 3.7.1 Oprateurs + et - . . . . . . . . . . . . . . . . . . . . . . . e . . . . . . 49 3.7.2 Oprateurs ++ et -- . . . . . . . . . . . . . . . . . . . . . e . . . . . . 49 3.8 Di rence de deux pointeurs . . . . . . . . . . . . . . . . . . . . . e . . . . . . 50 iv http://krimo666.mylivepage.com/
  • 19. 3.9 Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.10 Passage de param
  • 20. tres . . . . . . . . . . . . . . . . . . . . . . . . . . . e . . . 52 3.10.1 Les besoins du programmeur . . . . . . . . . . . . . . . . . . . . . . 52 3.10.2 Comment les langages de programmation satisfont ces besoins . . . . 52 3.10.3 La stratgie du langage C . . . . . . . . . . . . . . . . . . . . . e . . . 52 3.11 Discussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 3.12 Une derni
  • 21. re prcision . . . . . . . . . . . . . . . . . . . . . . . . . . . e e . . . 53 3.13 Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.14 Lecture formatte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . . . 56 3.15 Les derni
  • 22. res instructions . . . . . . . . . . . . . . . . . . . . . . . . . e . . . 56 3.15.1 Instruction switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 3.15.2 Instruction goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 3.15.3 Instruction nulle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 3.16 Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 3.17 Rcration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e e . . . 634 Relations entre tableaux et pointeurs 65 4.1 Conversion des tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 4.2 Loprateur dindexation . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . 66 4.3 Passage de tableau en param
  • 23. tre . . . . . . . . . . . . . . . . . . . . . . . e . 67 4.4 Modi cation des lments dun tableau pass en param
  • 24. tre . . . . . . . . ee e e . 68 4.5 Interdiction de modi cation des lments dun tableau pass en param
  • 25. tre ee e e . 69 4.6 Conversion des chanes littrales . . . . . . . . . . . . . . . . . . . . . . . e . 69 4.7 Retour sur printf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 4.8 Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 4.9 Tableaux multidimensionnels . . . . . . . . . . . . . . . . . . . . . . . . . . 72 4.9.1 Dclarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . 72 4.9.2 Acc
  • 26. s aux lments . . . . . . . . . . . . . . . . . . . . . . . . . . . e ee . 72 4.9.3 Passage en param
  • 27. tre . . . . . . . . . . . . . . . . . . . . . . . . . e . 72 4.10 Initialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 4.11 Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 4.12 Tableau de pointeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 4.12.1 Cas gnral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ee . 75 4.12.2 Tableaux de pointeurs vers des chanes . . . . . . . . . . . . . . . . . 76 4.12.3 Param
  • 28. tres dun programme . . . . . . . . . . . . . . . . . . . . . e . 77 4.13 Tableau et pointeur, cest la meme chose? . . . . . . . . . . . . . . . . . . . 78 4.13.1 Commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 4.13.2 Cas particulier des chanes littrales . . . . . . . . . . . . . . . . . e . 78 4.14 Rcration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e e . 795 Les entres-sorties e 81 5.1 Pointeur invalide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 5.2 Ouverture et fermeture de chiers . . . . . . . . . . . . . . . . . . . . . . . . 81 5.2.1 Ouverture dun chier : fopen . . . . . . . . . . . . . . . . . . . . . . 81 5.2.2 fermeture dun chier : fclose . . . . . . . . . . . . . . . . . . . . . 83 5.3 Lecture et criture par caract
  • 29. re sur chier e e . . . . . . . . . . . . . . . . . . 84 5.3.1 lecture par caract
  • 30. re : fgetc . . . . . e . . . . . . . . . . . . . . . . . . 84 v http://krimo666.mylivepage.com/
  • 32. re : getc . . . . . . . . . . . e . . . . . . . . . . . . 84 5.3.3 lecture par caract
  • 33. re : getchar . . . . . . . . . e . . . . . . . . . . . . 85 5.3.4 criture par caract
  • 34. re : fputc . . . . . . . . . . e e . . . . . . . . . . . . 85 5.3.5 criture par caract
  • 35. re : putc . . . . . . . . . . . e e . . . . . . . . . . . . 86 5.3.6 criture par caract
  • 36. re : putchar . . . . . . . . . e e . . . . . . . . . . . . 86 5.4 Lecture et criture par lignes sur chier . . . . . . . . e . . . . . . . . . . . . 86 5.4.1 lecture par ligne : fgets . . . . . . . . . . . . . . . . . . . . . . . . . 86 5.4.2 lecture par ligne : gets . . . . . . . . . . . . . . . . . . . . . . . . . . 87 5.4.3 criture par chane : fputs . . . . . . . . . . . . e . . . . . . . . . . . . 87 5.4.4 criture par chane : puts . . . . . . . . . . . . e . . . . . . . . . . . . 88 5.5 E S formattes sur chiers . . . . . . . . . . . . . . . . e . . . . . . . . . . . . 89 5.5.1 E criture formatte : fprintf . . . . . . . . . . e . . . . . . . . . . . . 89 5.5.2 Ecriture formatte : printf . . . . . . . . . . . e . . . . . . . . . . . . 92 5.5.3 E criture formatte dans une chane : sprintf . e . . . . . . . . . . . . 93 5.5.4 Exemples dutilisation des formats . . . . . . . . . . . . . . . . . . . 94 5.5.5 Entres formattes : fscanf . . . . . . . . . . . e e . . . . . . . . . . . . 94 5.5.6 Entres formattes : scanf . . . . . . . . . . . . e e . . . . . . . . . . . . 99 5.5.7 Entres formattes depuis une chane : sscanf . e e . . . . . . . . . . . . 99 5.6 Rcration . . . . . . . . . . . . . . . . . . . . . . . . . e e . . . . . . . . . . . . 100 5.7 Exercice 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 5.8 Exercice 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006 Structures, unions et numrations e e 103 6.1 Notion de structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 6.2 Dclaration de structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . 103 6.3 Oprateurs sur les structures . . . . . . . . . . . . . . . . . . . . . . . . . e . 105 6.3.1 Acc
  • 37. s aux membres des structures . . . . . . . . . . . . . . . . . . e . 105 6.3.2 A ectation de structures . . . . . . . . . . . . . . . . . . . . . . . . . 105 6.3.3 Comparaison de structures . . . . . . . . . . . . . . . . . . . . . . . 105 6.4 Tableaux de structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 6.5 Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 6.6 Pointeurs vers une structure . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 6.7 Structures dont un des membres pointe vers une structure du meme type . 107 6.8 Acc
  • 38. s aux lments dune structure pointe . . . . . . . . . . . . . . . . . e ee e . 107 6.9 Passage de structures en param
  • 39. tre . . . . . . . . . . . . . . . . . . . . . . e . 108 6.10 Dtermination de la taille alloue a un type . . . . . . . . . . . . . . . . . e e
  • 40. . 109 6.10.1 Retour sur la conversion des tableaux . . . . . . . . . . . . . . . . . 109 6.11 Allocation et libration despace pour les structures . . . . . . . . . . . . . e . 109 6.11.1 Allocation despace : fonctions malloc et calloc . . . . . . . . . . . 109 6.11.2 Libration despace : procdure free . . . . . . . . . . . . . . . . . . e e . 110 6.12 Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 6.13 Les champs de bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 6.13.1 Gnralits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ee e . 114 6.13.2 Contraintes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 6.14 Les numrations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e e . 115 6.15 Les unions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 6.16 Acc
  • 41. s aux membres de lunion . . . . . . . . . . . . . . . . . . . . . . . . . e . 116 vi http://krimo666.mylivepage.com/
  • 42. 6.17 Utilisation pratique des unions . . . . . . . . . . . . . . . . . . . . . . . . . 116 6.18 Une mthode pour allger lacc
  • 43. s aux membres . . . . . . . . . . . . . . . . 117 e e e7 Les expressions 119 7.1 Les conversions de types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 7.1.1 Utilit des conversions . . . . . . . . . . . e . . . . . . . . . . . . . . . 119 7.1.2 Ce quil y a dans une conversion . . . . . . . . . . . . . . . . . . . . 120 7.1.3 Lensemble des conversions possibles . . . . . . . . . . . . . . . . . . 120 7.1.4 Les situations de conversions . . . . . . . . . . . . . . . . . . . . . . 121 7.1.5 La promotion des entiers . . . . . . . . . . . . . . . . . . . . . . . . 121 7.1.6 Les conversions arithmtiques habituelles e . . . . . . . . . . . . . . . 122 7.1.7 Les surprises des conversions . . . . . . . . . . . . . . . . . . . . . . 123 7.2 Les oprateurs . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . . 124 7.2.1 Oprateur non bit
  • 44. bit . . . . . . . . . . e a . . . . . . . . . . . . . . . 124 7.2.2 Oprateur et bit
  • 45. bit . . . . . . . . . . . e a . . . . . . . . . . . . . . . 125 7.2.3 Oprateur ou bit
  • 46. bit . . . . . . . . . . . e a . . . . . . . . . . . . . . . 125 7.2.4 Oprateur ou exclusif bit
  • 47. bit . . . . . . . e a . . . . . . . . . . . . . . . 125 7.2.5 Oprateur dcalage
  • 48. gauche . . . . . . . e e a . . . . . . . . . . . . . . . 125 7.2.6 Oprateur dcalage
  • 49. droite . . . . . . . . e e a . . . . . . . . . . . . . . . 125 7.2.7 Oprateur conditionnel . . . . . . . . . . e . . . . . . . . . . . . . . . 126 7.2.8 Oprateur virgule . . . . . . . . . . . . . . e . . . . . . . . . . . . . . . 126 7.2.9 Oprateurs da ectation compose . . . . e e . . . . . . . . . . . . . . . 127 7.3 Oprateur conversion . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . . 127 7.4 Smantique des expressions . . . . . . . . . . . . e . . . . . . . . . . . . . . . 129 7.4.1 Oprateurs dadressage . . . . . . . . . . e . . . . . . . . . . . . . . . 129 7.4.2 Priorit et associativit des oprateurs . . e e e . . . . . . . . . . . . . . . 129 7.4.3 Ordre dvaluation des oprandes . . . . . e e . . . . . . . . . . . . . . . 131 7.5 Rcration . . . . . . . . . . . . . . . . . . . . . . e e . . . . . . . . . . . . . . . 1318 Le prprocesseur e 133 8.1 Traitement de macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 8.1.1 Les macros sans param
  • 50. tres . . . e . . . . . . . . . . . . . . . . . . . . 133 8.1.2 Macros prd nies . . . . . . . . ee . . . . . . . . . . . . . . . . . . . . 135 8.1.3 Les macros avec param
  • 51. tres . . . e . . . . . . . . . . . . . . . . . . . . 135 8.1.4 Les pi
  • 52. ges des macros . . . . . . e . . . . . . . . . . . . . . . . . . . . 137 8.1.5 Macros gnrant des instructions ee . . . . . . . . . . . . . . . . . . . . 138 8.2 Compilation conditionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 8.2.1 Commande if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 8.2.2 Commandes ifdef et ifndef . . . . . . . . . . . . . . . . . . . . . 140 8.2.3 Loprateur defined . . . . . . . e . . . . . . . . . . . . . . . . . . . . 140 8.2.4 La commande error . . . . . . . . . . . . . . . . . . . . . . . . . . 140 8.2.5 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 8.3 Rcration . . . . . . . . . . . . . . . . . e e . . . . . . . . . . . . . . . . . . . . 141 vii http://krimo666.mylivepage.com/
  • 53. 9 Les dclarations e 143 9.1 Dclarations de d nition et de rfrence . . . . . . . . . e e ee . . . . . . . . . . . 143 9.1.1 Dclarations de variables . . . . . . . . . . . . . e . . . . . . . . . . . 144 9.1.2 Dclarations de fonctions . . . . . . . . . . . . . e . . . . . . . . . . . 144 9.1.3 Dclarations dtiquettes de structures et union . e e . . . . . . . . . . . 144 9.2 Porte des dclarations . . . . . . . . . . . . . . . . . . . e e . . . . . . . . . . . 145 9.3 Visibilit des identi cateurs . . . . . . . . . . . . . . . . e . . . . . . . . . . . 146 9.4 Les espaces de noms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 9.4.1 Position du probl
  • 54. me . . . . . . . . . . . . . . . . e . . . . . . . . . . . 146 9.4.2 Les espaces de noms du langage C . . . . . . . . . . . . . . . . . . . 147 9.5 Dure de vie . . . . . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . 148 9.6 Classes de mmoire . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . 149 9.6.1 Position du probl
  • 55. me . . . . . . . . . . . . . . . . e . . . . . . . . . . . 149 9.6.2 Les spci cateurs de classe de mmoire . . . . . . e e . . . . . . . . . . . 150 9.7 La compilation spare . . . . . . . . . . . . . . . . . . . e e . . . . . . . . . . . 151 9.7.1 Gnralits . . . . . . . . . . . . . . . . . . . . . ee e . . . . . . . . . . . 151 9.7.2 La mthode du langage C . . . . . . . . . . . . . e . . . . . . . . . . . 152 9.8 D nition de types . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . 153 9.9 Utilit des typedef . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . 153 9.9.1 Restriction dun type de base . . . . . . . . . . . . . . . . . . . . . . 154 9.9.2 D nition de type structure . . . . . . . . . . . . e . . . . . . . . . . . 154 9.9.3 D nition de types opaques . . . . . . . . . . . . e . . . . . . . . . . . 155 9.10 Quali catifs de type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 9.11 Fonction a nombre variable de param
  • 56. tres . . . . . . . .
  • 57. e . . . . . . . . . . . 156 9.11.1 Exemple 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 9.11.2 Exemple 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 9.12 Syntaxe des dclarations . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . 158 9.13 Smantique des dclarations . . . . . . . . . . . . . . . . e e . . . . . . . . . . . 161 9.14 Discussion sur les dclarations . . . . . . . . . . . . . . . e . . . . . . . . . . . 162 9.15 En pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 9.16 Un outil : cdecl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16310 La biblioth
  • 58. que standard e 165 10.1 Diagnostic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 10.2 Manipulation de caract
  • 59. res ctype.h . . . . . . . . e . . . . . . . . . . . . . 165 10.3 Environnement local locale.h . . . . . . . . . . . . . . . . . . . . . . . . 166 10.4 Mathmatiques math.h . . . . . . . . . . . . . . . e . . . . . . . . . . . . . 166 10.4.1 Fonctions trigonomtriques et hyperboliques . e . . . . . . . . . . . . . 166 10.4.2 Fonctions exponentielles et logarithmiques . . . . . . . . . . . . . . . 166 10.4.3 Fonctions diverses . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 10.5 Branchements non locaux setjmp.h . . . . . . . . . . . . . . . . . . . . . 166 10.6 Manipulation des signaux signal.h . . . . . . . . . . . . . . . . . . . . . 167 10.7 Nombre variable de param
  • 60. tres stdarg.h . . . . . e . . . . . . . . . . . . . 167 10.8 Entres sorties stdio.h . . . . . . . . . . . . . . . e . . . . . . . . . . . . . 167 10.8.1 Oprations sur les chiers . . . . . . . . . . . e . . . . . . . . . . . . . 167 10.8.2 Acc
  • 61. s aux chiers . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . 167 10.8.3 Entres-sorties formattes . . . . . . . . . . . e e . . . . . . . . . . . . . 167 viii http://krimo666.mylivepage.com/
  • 63. res . . . . . . . . . e e . . . . . . . . . . . . . . . 168 10.8.5 Entres-sorties binaires . . . . . . . . . . e . . . . . . . . . . . . . . . 168 10.8.6 Position dans un chier . . . . . . . . . . . . . . . . . . . . . . . . . 168 10.8.7 Gestion des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 10.9 Utilitaires divers stdlib.h . . . . . . . . . . . . . . . . . . . . . . . . . . 168 10.9.1 Conversion de nombres . . . . . . . . . . . . . . . . . . . . . . . . . 168 10.9.2 Gnration de nombres pseudo-alatoires ee e . . . . . . . . . . . . . . . 169 10.9.3 gestion de la mmoire . . . . . . . . . . . e . . . . . . . . . . . . . . . 169 10.9.4 Communication avec lenvironnement . . . . . . . . . . . . . . . . . 169 10.9.5 Recherche et tri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 10.9.6 Arithmtique sur les entiers . . . . . . . . e . . . . . . . . . . . . . . . 169 10.9.7 Gestion des caract
  • 64. res multi-octets . . . . e . . . . . . . . . . . . . . . 169 10.10Manipulation de chanes string.h . . . . . . . . . . . . . . . . . . . . . . 169 10.11Manipulation de la date et de lheure time.h . . . . . . . . . . . . . . . . 170A Les jeux de caract
  • 65. res e 171 A.1 Les normes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 A.2 Le code ascii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 A.2.1 Les codes ascii en octal . . . . . . . . . . . . . . . . . . . . . . . . 175 A.2.2 Les codes ascii en hexadcimal e . . . . . . . . . . . . . . . . . . . . 175 A.2.3 Les codes ascii en dcimal . . . e . . . . . . . . . . . . . . . . . . . . 176 A.3 Les codes ISO-Latin-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177B Bibliographie 179C Ressources Internet 181D La grammaire 183 D.1 Les units lexicales . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . 183 D.2 Les mots-cls . . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . 183 D.3 Les identi cateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 D.4 Les constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 D.5 Les chanes littrales . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . 186 D.6 Les oprateurs . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . 186 D.7 La ponctuation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 D.8 Nom de chier dinclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 D.9 Les nombres du prprocesseur . . . . e . . . . . . . . . . . . . . . . . . . . . . 187 D.10 Les expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 D.11 Les dclarations . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . 190 D.12 Les instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 D.13 D nitions externes . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . 194 D.14 Directives du prprocesseur . . . . . e . . . . . . . . . . . . . . . . . . . . . . 194 D.15 Rfrences croises de la grammaire ee e . . . . . . . . . . . . . . . . . . . . . . 196 ix http://krimo666.mylivepage.com/
  • 66. E Un bestiaire de types 199 E.1 Les types de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 E.2 Les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 E.3 Les pointeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 E.4 Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 E.5 Les numrations . . . . . . . . . . . . . e e . . . . . . . . . . . . . . . . . . . . 202 E.6 Les structures, unions et champs de bits . . . . . . . . . . . . . . . . . . . . 202 E.7 Les quali catifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203F Le b^tisier e 205 F.1 Erreur avec les oprateurs . . . . . . . . . . . . e . . . . . . . . . . . . . . . . 205 F.1.1 Erreur sur une comparaison . . . . . . . . . . . . . . . . . . . . . . . 205 F.1.2 Erreur sur la ectation . . . . . . . . . . . . . . . . . . . . . . . . . . 205 F.2 Erreurs avec les macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 F.2.1 Un define nest pas une dclaration . e . . . . . . . . . . . . . . . . 206 F.2.2 Un define nest pas une initialisation . . . . . . . . . . . . . . . . 206 F.2.3 Erreur sur macro avec param
  • 67. tres . . . e . . . . . . . . . . . . . . . . 206 F.2.4 Erreur avec les e ets de bord . . . . . . . . . . . . . . . . . . . . . . 207 F.3 Erreurs avec linstruction if . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 F.4 Erreurs avec les commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . 207 F.5 Erreurs avec les priorits des oprateurs . . . . e e . . . . . . . . . . . . . . . . 208 F.6 Erreur avec linstruction switch . . . . . . . . . . . . . . . . . . . . . . . . 208 F.6.1 Oubli du break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 F.6.2 Erreur sur le default . . . . . . . . . . . . . . . . . . . . . . . . . . 208 F.7 Erreur sur les tableaux multidimensionnels . . . . . . . . . . . . . . . . . . 209 F.8 Erreur avec la compilation spare . . . . . . . e e . . . . . . . . . . . . . . . . 209 x http://krimo666.mylivepage.com/
  • 68. Avant-proposAu sujet de lauteur Je suis ingnieur au cnrs et je travaille dans un laboratoire de recherche de luniver- esit de Grenoble : le laboratoire clips http: www-clips.imag.fr. Toute noti cation ederreur ou toute proposition damlioration de ce document sera la bienvenue
  • 69. le-mail e aBernard.Cassagne@imag.fr.Au sujet de ce manuel La littrature technique nous a habitu
  • 70. deux styles dcriture de manuels : le style e ea e manuel de rfrence et le style guide de lutilisateur Les manuels de rfrence se ee eedonnent comme buts detre exhaustifs et rigoureux. Les guides de lutilisateur se donnentcomme but detre didactiques. Cette partition vient du fait quil est quasiment impossiblesur des sujets complexes comme les langages de programmation detre
  • 71. la fois rigoureux aet didactique. Pour sen persuader il su t de lire le texte dune norme internationale. Ce manuel se place dans la catgorie guide de lutilisateur : son but est de permettre ea
  • 72. une personne sachant programmer, dacqurir les lments fondamentaux du langage C. e eeCe manuel prsente donc chaque notion selon une gradation des di cults et ne cherche e epas
  • 73. etre exhaustif. Il comporte de nombreux exemples, ainsi que des exercices dont la asolution se trouve dans le corps du texte, mais commence toujours sur une page di rente. eLe lecteur peut donc au choix, ne lire les solutions quapr
  • 74. s avoir programm sa solution e epersonnelle, ou bien lire directement la solution comme si elle faisait partie du manuel.Les notions supposes connues du lecteur e Les notions supposes connues du lecteur sont les concepts gnraux concernant les lan- e eegages de programmation. En n du texte se trouve un glossaire qui regroupe des conceptsgnraux et certains concepts propres du langage C. En cas de rencontre dun mot inconnu, eele lecteur est invit
  • 75. sy reporter. eaUn mot sur les probl
  • 76. mes de traduction e Le document de rfrence concernant le langage C est la norme ansi d nissant le ee elangage. Cest un document crit en anglais technique, ce qui pose des probl
  • 77. mes de e etraduction : comment traduire les nologismes invents pour les besoins du langage? De e emani
  • 78. re
  • 79. ne pas drouter les lecteurs franais, je me suis impos de respecter les choix de e a e c e 1 http://krimo666.mylivepage.com/
  • 80. traduction dun grand diteur 1 de livres techniques, meme quand je nai pas trouv ces e echoix tr
  • 81. s heureux. Jai donc utilis dclarateur, initialisateur et spci cateur bien que me e e e esemble-t-il, ils r^pent assez fort le palais quand on les prononce. aConventions syntaxiques Les r
  • 82. gles de grammaires qui sont donnes dans le corps de ce manuel sont simpli es e e edans un but didactique par rapport
  • 83. la grammaire o cielle du langage. Cependant, le alecteur trouvera
  • 84. lannexe D la grammaire sous une forme exhaustive et conforme
  • 85. la a anorme ansi. La typographie des r
  • 86. gles suit les conventions suivantes : e 1. les lments terminaux du langage seront crits dans une fonte
  • 87. largeur constante, ee e a comme ceci : while. 2. les lments non terminaux du langage seront crits en italique, comme ceci : ee e instruction. 3. les r
  • 88. gles de grammaires seront crites de la mani
  • 89. re suivante : e e e les parties gauches de r
  • 90. gles seront seules sur leur ligne, cadres
  • 91. gauche et e e a suivies du signe deux points :. les di rentes parties droites possibles seront introduites par le signe et e indentes sur la droite. e Exemple : instruction : if expression instruction 1 if expression instruction 1 else instruction 2 Ceci signi e quil y a deux mani
  • 92. res possibles de driver le non-terminal ins- e e truction. La premi
  • 93. re r
  • 94. gle indique quon peut le driver en : e e e if expression instruction 1 la deuxi
  • 95. me r
  • 96. gle indique quon peut aussi le driver en : e e e if expression instruction 1 else instruction 2 une partie droite de r
  • 97. gle pourra etre crite sur plusieurs lignes. Ceci permettra e e de r ter une mani
  • 98. re possible de mettre en page le fragment de programme ee e C correspondant, de faon
  • 99. obtenir une bonne lisibilit. c a e Sans en changer la signi cation, lexemple prcdent aurait pu etre crit : ee e instruction : if expression instruction 1 if expression instruction 1 else instruction 2 1. Cest masson qui a dit en franais 1 et 2 Cf. Bibliographie e e c 2 http://krimo666.mylivepage.com/
  • 101. gle seront indiqus en mettant le mot option ee e e en italique et dans une fonte plus petite
  • 102. droite de llment concern. a ee e Par exemple, la r
  • 103. gle : e dclarateur-init : e dclarateur initialisateur option e indique que dclarateur-init peut se driver soit en : e e dclarateur initialisateur e soit en : dclarateur eRemerciements Beaucoup de personnes mont aid
  • 104. amliorer le manuscrit original en me signalant ea ede nombreuses erreurs et en me proposant des amliorations. Quelles soient toutes remer- ecies de leurs lectures attentives et amicalement critiques, tout particuli
  • 105. rement Damien e eGenthial, Fabienne Lagnier, Xavier Nicollin et Serge Rouveyrol. 3 http://krimo666.mylivepage.com/
  • 106. Chapitre 1Les bases Le but de ce chapitre est de prsenter les lments de base du langage C, sous leur forme e eela plus simple. Arriv au bout du chapitre, le lecteur sera capable dcrire des programmes e elmentaires.ee1.1 Les versions du langage C Le langage C a subi au cours de son histoire deux grandes tapes de d nition. Il a e et d ni une premi
  • 107. re fois par deux chercheurs des Laboratoires Bell, B. Kernighan et D.ee e eRitchie, dans un livre intitul The C Programming Language , publi en 1978. Cette e eversion est appele Kernighan et Ritchie 78 , ou KR 78 en abrg, ou encore le plus e eesouvent, simplement KR. Suite
  • 109. s dunix, qui induisit le succ
  • 110. s du langage C, la situation a e edevint confuse : plusieurs fournisseurs de compilateurs mirent sur le march des compi- e e
  • 112. KR car comportant des extensions particuli
  • 113. res. A la n des aannes 80, il devint ncessaire de mettre de lordre dans ce chaos et donc de normaliser e ele langage, t^che
  • 114. laquelle sattela lansi 1, organisme de normalisation amricain. La a a enorme ansi fut termine en 1989. En 1990, liso 2 , organisme de normalisation interna- etional, donc chapeautant lansi, adopta tel quel le standard ansi en tant que standardiso. Cette seconde version du langage C devrait donc sappeler iso c, mais comme lesacteurs importants du monde informatique sont de culture anglo-saxonne et que ceux-cipersistent
  • 115. lappeler ansi c, presque? tout le monde fait de meme. Dans ce manuel, anous suivrons lusage gnral, et utiliserons lexpression ansi c pour dsigner la norme ee ecommune
  • 116. lansi et liso. a Ce document dcrit C ansi, avec parfois des rfrences
  • 117. C KR, de mani
  • 118. re
  • 119. per- e ee a e amettre au lecteur de comprendre les sources crits avant lapparition de la norme. e1.2 Langage et biblioth
  • 120. que standard e Le langage C a t conu pour lcriture de syst
  • 122. me unix. ee c e e ePour cette raison, ses concepteurs ont fait une sparation nette entre ce qui est purement e 1. American National Standards Institute 2. International Standards Organization 5 http://krimo666.mylivepage.com/
  • 123. algorithmique dclarations, instructions, etc. et tout ce qui est interaction avec le sys- et
  • 124. me entres sorties, allocation de mmoire, etc. qui est ralis par appel de fonctions e e e e ese trouvant dans une biblioth
  • 126. que standard. Cette coupure se retrouve e edans la norme qui est compose essentiellement de deux grands chapitres, les chapitres e langage et biblioth
  • 127. que . e Ce manuel se donne comme objectif de donner une vue densemble du langage, mais pasde la biblioth
  • 128. que standard. De la biblioth
  • 129. que standard ne seront prsentes de mani
  • 130. re e e e e ecompl
  • 131. te que les fonctions permettant de raliser les entres-sorties et la gestion mmoire. e e e eCependant, la liste exhaustive des noms des fonctions de la biblioth
  • 132. que, classs par type e edutilisation, est donne dans le chapitre 10. e1.3 Les phases de compilationLes compilateurs C font subir deux transformations aux programmes : 1. un prprocesseur ralise des transformations dordre purement textuel, pour rendre e e des services du type inclusion de source, compilation conditionnelle, et traitement de macros ; 2. le compilateur proprement dit prend le texte gnr par le prprocesseur et le traduit e ee e en instructions machine. La fonction de prprocesseur est assez souvent implmente par un programme spar e e e e ecpp sous unix qui est automatiquement appel par le compilateur. e1.4 Les jeux de caract
  • 133. res e Le lecteur non familiaris avec les probl
  • 134. mes de codage de caract
  • 135. res peut se reporter e e ea
  • 138. mes sont dvelopps. u e e e Le langage C nimpose pas un jeu de caract
  • 139. res particulier. Par contre tout le langage emots-cls, oprateurs, etc. est d ni en utilisant les caract
  • 140. res ascii. Meme les identi - e e e ecateurs doivent etre crits avec lalphabet anglais. Par contre, le jeu de caract
  • 141. res utilis e e epour les constantes caract
  • 142. re, les chanes de caract
  • 143. res et les commentaires est dpendant e e ede limplmentation. e Pendant tr
  • 144. s longtemps les programmeurs non anglophones ont utilis lascii faute de e emieux, pour programmer en C. Actuellement, si on est dans le monde unix, il ne doitpas y avoir de probl
  • 145. me pour disposer dun environnement de travail la fenetre, le shell, elditeur, le compilateur enti
  • 146. rement
  • 147. la norme iso-8859. Dans ce manuel, on suppose e e aque le lecteur dispose dun tel environnement : les exemples donns sont crits en iso-8859. e e1.5 Les units lexicales e Le langage comprends 6 types dunits lexicales : les mots-cls, les identi cateurs, les e econstantes, les chanes, les oprateurs et les signes de ponctuation. e 6 http://krimo666.mylivepage.com/
  • 148. 1.5.1 Les mots-cls e Le langage C est un langage
  • 149. mots-cls, ce qui signi e quun certain nombre de a emots sont rservs pour le langage lui-meme et ne peuvent donc pas etre utiliss comme e e eidenti cateurs. La liste exhaustive des mots-cls est la suivante : e auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static whileAttention Si le compilateur produit un message derreur syntaxique incomprhensible il est re- ecommand davoir le r exe de consulter la liste des mots cls pour vri er que lon a pas e e e epris comme identi cateur un mot-cl. Si le lecteur dsire etre convaincu, il lui est suggr e e eede donner le nom long
  • 151. re. a e1.5.2 Les identi cateurs Le but dun identi cateur est de donner un nom
  • 152. une entit du programme variable, a eprocdure, etc. Les identi cateurs sont forms dune suite de lettres, de chi res et du signe e esoulign, suite dont le premier caract
  • 153. re ne peut pas etre un chi re. Les lettres formant e eles identi cateurs peuvent etre majuscules ou minuscules, mais doivent faire partie delalphabet anglais : les lettres accentues sont interdites. Les noms var1, PremierIndex, ei_tab, _deb sont des identi cateurs valides, mais 1i et i:j ne le sont pas. Un compilateur a le droit de tronquer les identi cateurs internes ceux qui ne sont pasexports
  • 154. un diteur de liens au del
  • 155. dune certaine longueur. Cette limite dpend de e a e a elimplmentation, mais ne doit pas etre infrieure
  • 157. res. e e a e De la meme mani
  • 158. re, les identi cateurs externes exports
  • 159. un diteur de liens pour- e e a eront etre tronqus au del
  • 160. dune certaine longueur. Cette limite est gnralement plus e a eesv
  • 161. re, mais ne peut etre infrieure
  • 163. res. De surcrot, la distinction entre minus- ee e a ecules et majuscules nest pas garantie au contraire des noms internes, pour lesquels cettedistinction est garantie.1.6 Les commentaires Syntaxe : Les commentaires dbutent par e * et se terminent par * . Exemple : * Ceci est un commentaire * Toute occurrence de * est interprte comme le dbut dun commentaire sauf dans ee e une chane littrale, ou un commentaire les commentaires ne peuvent donc pas etre e imbriqus. e 7 http://krimo666.mylivepage.com/
  • 164. Recommandations : Dans le domaine gnral de la programmation, pas seulement le langage C, il est ee admis quil faille commenter selon les niveaux suivants : unit de compilation : pour indiquer le nom de lauteur, les droits de copyright, e la date de cration, les dates et auteurs des di rentes modi cations, ainsi que e e la raison detre de lunit ; e procdure : pour indiquer les param
  • 165. tres et la raison detre de la procdure ; e e e groupe dintructions : pour exprimer ce que ralise une fraction signi cative e dune procdure ; e dclaration ou instruction : le plus bas niveau de commentaire. e Pour le niveau unit de compilation, voici un exemple tir du source de perl : e e * * Copyright c 1991, Larry Wall * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. * * $Log: perl.c,v $ * Revision 4.0.1.8 1993 02 05 19:39:30 lwall * Revision 4.0.1.7 92 06 08 14:50:39 lwall * Revision 4.0.1.3 91 06 07 11:40:18 lwall * Revision 4.0.1.2 91 06 07 11:26:16 lwall * Revision 4.0.1.1 91 04 11 17:49:05 lwall * Revision 4.0 91 03 20 01:37:44 lwall * 4.0 baseline. * * Pour le niveau de la procdure, je trouve agrable de raliser des esp
  • 166. ces de car- e e e e touches permettant de dcouper visuellement un listing en ses di rentes procdures, e e e comme ceci par exemple : ****************************************************************************** * * * strcpy * * * * But: * * copie une cha^ne dans une autre * * * * Interface: * * s1 : cha^ne destination * * s2 : cha^ne source * * * ****************************************************************************** En ce qui concerne le niveau groupe dinstruction, il est classique de faire une mise en page comme dans lexemple suivant tir du source de dvips 3 : e *3. dvips est un traducteur en PostScript du format gnr par TeX e ee 8 http://krimo666.mylivepage.com/
  • 167. * If nothing above worked, then we get desperate. We attempt to * open the stupid font at one of a small set of predefined sizes, * and then use PostScript scaling to generate the correct size. * * We much prefer scaling up to scaling down, since scaling down * can omit character features, so we try the larger sizes first, * and then work down. * Pour le niveau dclaration ou instruction, on commentera sur la meme ligne. Exemple e tir du source du compilateur gnu cc : e char *name; * Function unit name. * struct function_unit *next; * Next function unit. * int multiplicity; * Number of units of this type. * int simultaneity; * Maximum number of simultaneous insns on this function unit or 0 if unlimited. * struct range ready_cost; * Range of ready cost values. * struct range issue_delay; * Range of issue delay values. *Attention Lerreur classique avec les commentaires est doublier la squence fermante * . Dans e ce cas, le compilateur va considrer que le commentaire se poursuit jusqu
  • 168. la n du e a prochain commentaire et ceci peut ne pas gnrer derreur syntaxique. ee Exemple : instruction * premier commentaire instruction ... instruction * second commentaire * instruction On voit que dans ce cas, tout un ensemble dinstructions sera ignor par le compila- e teur sans gnrer le moindre message derreur ee 4. Un commentaire ne peut pas contenir un commentaire, il nest donc pas possible de mettre en commentaire un morceau de programme comportant dj
  • 169. des commen- ea taires 5. 4. Dans 5 , Peter Van der Linden donne un exemple amusant de ce bug. Dans un compilateur, le cacit ede lalgorithme de hachage de la table des identi cateurs dpendait de la bonne initialisation dune variable. eDans le code initial, linitialisation avait t mise involontairement dans un commentaire provoquant une eeinitialisation par dfaut
  • 170. zro. La simple correction du bug, t gagner 15 de cacit au compilateur ! e a e e 5. Voir cependant F.4 9 http://krimo666.mylivepage.com/
  • 171. 1.7 Les types de base1.7.1 Les caract
  • 172. res e Le mot-cl dsignant les caract
  • 173. res est char. Un objet de ce type doit pouvoir contenir e e ele code de nimporte quel caract
  • 174. re de lensemble des caract
  • 175. res utilis sur la machine. e e eLe codage des caract
  • 176. res nest pas d ni par le langage : cest un choix dimplmentation. e e eCependant, dans la grande majorit des cas, le code utilis est le code dit ascii, ou un e esurensemble comme par exemple la norme iso-8859.Attention Le type caract
  • 177. re est original par rapport
  • 178. ce qui se fait habituellement dans les e alangages de programmation. La norme prcise clairement quun objet de type caract
  • 179. re e epeut etre utilis dans toute expression o
  • 180. un objet de type entier peut etre utilis. Par e u eexemple, si c est de type char, il est valide dcrire c + 1 : cela donnera le caract
  • 181. re e esuivant dans le code utilis sur la machine. e1.7.2 Les entiers Le mot cl dsignant les entiers est int. Les entiers peuvent etre a ects de deux types e e edattributs : un attribut de prcision et un attribut de reprsentation. e e Les attributs de prcision sont short et long. Du point de vue de la prcision, on peut e eavoir trois types dentiers : short int, int et long int. Les int sont implments sur ce e equi est un mot naturel de la machine. Les long int sont implments si possible plus e egrands que les int, sinon comme des int. Les short int sont implments si possible e eplus courts que les int, sinon comme des int. Les implmentations classiques mettent les eshort int sur 16 bits, les long int sur 32 bits, et les int sur 16 ou 32 bits selon ce quiest le plus e cace. Lattribut de reprsentation est unsigned. Du point de vue de la reprsentation, on e epeut avoir deux types dentiers : int et unsigned int. Les int permettent de contenirdes entiers signs, tr
  • 182. s gnralement en reprsentation en complment
  • 183. 2, bien que cela e e ee e e ane soit pas impos par le langage. Les unsigned int permettent de contenir des entiers enon signs en reprsentation binaire. e e On peut combiner attribut de prcision et attribut de reprsentation et avoir par e eexemple un unsigned long int. En rsum, on dispose donc de six types dentiers : e eint, short int, long int tous trois signs et unsigned int, unsigned short int eet unsigned long int.1.7.3 Les ottants Il existe trois types de ottants correspondants
  • 184. trois prcisions possibles. En allant a ede la prcision la plus faible vers la plus forte, on dispose des types float, double et elong double. La prcision e ectivement utilise pour chacun de ces types dpend de e e elimplmentation. e 10 http://krimo666.mylivepage.com/
  • 185. 1.8 Les constantes1.8.1 Les constantes enti
  • 186. res e Syntaxe : On dispose de 3 notations pour les constantes enti
  • 187. res : dcimale, octale et hexad- e e e cimale. Les constantes dcimales scrivent de la mani
  • 188. re usuelle ex : 372. Les constantes e e e octales doivent commencer par un zro et ne comporter que des chi res octaux e ex : 0477. Les constantes hexadcimales doivent commencer par 0x ou 0X et etre e composes des chi res de 0
  • 189. 9, ainsi que des lettres de a
  • 190. f sous leur forme majuscule e a a ou minuscule ex : 0x5a2b, 0X5a2b, 0x5A2B. Une constante enti
  • 191. re peut etre su xe par la lettre u ou U pour indiquer quelle e e doit etre interprte comme tant non signe. Elle peut galement etre su xe par ee e e e e la lettre l ou L pour lui donner lattribut de prcision long. e Smantique : e Le type dune constante enti
  • 192. re est le premier type, choisi dans une liste de types, e permettant de reprsenter la constante : e forme de la constante liste de types pas de su xe, dcimal e int, long int, unsigned long int pas de su xe, octal ou hexadcimal int, unsigned int, long int, unsigned e long int su x par u ou U e unsigned int, unsigned long int su x par l ou L e long int, unsigned long int su x par u ou U et l ou L e unsigned long intAttention Ces conventions dcriture des constantes ne respectent pas lcriture mathmatique, e e epuisque 010 devant etre interprt en octal, nest pas gal
  • 193. 10. ee e a1.8.2 Les constantes caract
  • 194. res e Syntaxe : Une constante caract
  • 195. re scrit entoure du signe . La r
  • 197. crire e e e e ee ae le caract
  • 198. re entour du signe ; par exemple, la constante caract
  • 199. re correspondant e e e au caract
  • 200. re g scrit g. e e 11 http://krimo666.mylivepage.com/