Vous êtes sur la page 1sur 25

16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

Chapitre1Lesbasesdelaprogrammationen
C

1.1Historique
LeCatconuen1972parDennisRichieetKenThompson,chercheursauxBellLabs,afinde
dvelopperunsystmed'exploitationUNIXsurunDECPDP11.En1978,BrianKernighanet
DennisRichiepublientladfinitionclassiqueduCdanslelivreTheCProgramminglanguage[6].Le
Cdevenantdeplusenpluspopulairedanslesannes80,plusieursgroupesmirentsurlemarchdes
compilateurscomportantdesextensionsparticulires.En1983,l'ANSI(AmericanNationalStandards
Institute)dcidadenormaliserlelangagecetravails'achevaen1989parladfinitiondelanorme
ANSIC.Cellecifutreprisetellequelleparl'ISO(InternationalStandardsOrganization)en1990.
C'estcestandard,ANSIC,quiestdcritdansleprsentdocument.

1.2Lacompilation
LeCestunlangagecompil(paroppositionauxlangagesinterprts).Celasignifiequ'un
programmeCestdcritparunfichiertexte,appelfichiersource.Cefichiern'tantvidemmentpas
excutableparlemicroprocesseur,ilfautletraduireenlangagemachine.Cetteoprationesteffectue
parunprogrammeappelcompilateur.Lacompilationsedcomposeenfaiten4phasessuccessives:

1. Letraitementparleprprocesseur:lefichiersourceestanalysparleprprocesseurqui
effectuedestransformationspurementtextuelles(remplacementdechanesdecaractres,
inclusiond'autresfichierssource...).
2. Lacompilation:lacompilationproprementditetraduitlefichiergnrparleprprocesseur
enassembleur,c'estdireenunesuited'instructionsdumicroprocesseurquiutilisentdes
mnmoniquesrendantlalecturepossible.
3. L'assemblage:cetteoprationtransformelecodeassembleurenunfichierbinaire,c'estdire
eninstructionsdirectementcomprhensiblesparleprocesseur.Gnralement,lacompilationet
l'assemblagesefontdanslafoule,saufsil'onspcifieexplicitementquel'onveutlecode
assembleur.Lefichierproduitparl'assemblageestappelfichierobjet.
4. L'ditiondeliens:unprogrammeestsouventsparenplusieursfichierssource,pourdes
raisonsdeclartmaisaussiparcequ'ilfaitgnralementappeldeslibrairiesdefonctions
standarddjcrites.Unefoischaquecodesourceassembl,ilfautdonclierentreeuxles
diffrentsfichiersobjets.L'ditiondeliensproduitalorsunfichierditexcutable.

Lesdiffrentstypesdefichiersutilisslorsdelacompilationsontdistingusparleursuffixe.Les
fichierssourcesontsuffixspar.c,lesfichiersprtraitsparleprprocesseurpar.i,lesfichiers
assembleurpar.s,etlesfichiersobjetpar.o.Lesfichiersobjetscorrespondantauxlibrairiespr
compilesontpoursuffixe.a.

https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 1/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

LecompilateurCsousUNIXs'appellecc.Onutiliseradeprfrencelecompilateurgccduprojet
GNU.Cecompilateurestlivrgratuitementavecsadocumentationetsessources.Pardfaut,gcc
activetouteslestapesdelacompilation.Onlelanceparlacommande
gcc[options]fichier.c[llibrairies]

Pardfaut,lefichierexcutables'appellea.out.Lenomdel'excutablepeuttremodifil'aidede
l'optiono.

Lesventuelleslibrairiessontdclaresparlachanellibrairie.Danscecas,lesystmerecherche
lefichierliblibrairie.adanslerpertoirecontenantleslibrairiesprcompiles(gnralement
/usr/lib/).Parexemple,pourlierleprogrammeaveclalibrairiemathmatique,onspcifielm.Le
fichierobjetcorrespondantestlibm.a.Lorsqueleslibrairiesprcompilesnesetrouventpasdansle
rpertoireusuel,onspcifieleurchemind'accsparl'optionL.

Lesoptionslesplusimportantesducompilateurgccsontlessuivantes:

c:supprimel'ditiondeliensproduitunfichierobjet.
E:n'activequeleprprocesseur(lersultatestenvoysurlasortiestandard).
g:produitdesinformationssymboliquesncessairesaudbogueur.
Inomderpertoire:spcifielerpertoiredanslequeldoiventtrerecherchslesfichiersen
ttesinclure(enplusdurpertoirecourant).
Lnomderpertoire:spcifielerpertoiredanslequeldoiventtrerecherchesleslibrairies
prcompiles(enplusdurpertoireusuel).
onomdefichier:spcifielenomdufichierproduit.Pardfaut,leexcutablefichier
s'appellea.out.
O,O1,O2,O3:optionsd'optimisations.Sanscesoptions,lebutducompilateurestde
minimiserlecotdelacompilation.Enrajoutantl'unedecesoptions,lecompilateurtentede
rduirelatailleducodeexcutableetletempsd'excution.Lesoptionscorrespondent
diffrentsniveauxd'optimisation:O1(similaireO)correspondunefaibleoptimisation,O3
l'optimisationmaximale.
S:n'activequeleprprocesseuretlecompilateurproduitunfichierassembleur.
v:imprimelalistedescommandesexcutesparlesdiffrentestapesdelacompilation.
W:imprimedesmessagesd'avertissement(warning)supplmentaires.
Wall:imprimetouslesmessagesd'avertissement.

Pourplusdedtailssurgcc,onpeutconsulterlechapitre4de[8].

1.3LescomposantslmentairesduC
UnprogrammeenlangageCestconstitudessixgroupesdecomposantslmentairessuivants:

lesidentificateurs,
lesmotsclefs,
lesconstantes,
leschanesdecaractres,
lesoprateurs,
lessignesdeponctuation.

Onpeutajoutercessixgroupeslescommentaires,quisontenlevsparleprprocesseur.

1.3.1Lesidentificateurs
https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 2/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

Lerled'unidentificateurestdedonnerunnomuneentitduprogramme.Plusprcisment,un
identificateurpeutdsigner:

unnomdevariableoudefonction,
untypedfinipartypedef,struct,unionouenum,
unetiquette.

Unidentificateurestunesuitedecaractresparmi:

leslettres(minusculesoumajuscules,maisnonaccentues),
leschiffres,
le``blancsoulign''(_).

Lepremiercaractred'unidentificateurnepeutpastreunchiffre.Parexemple,var1,tab_23ou_deb
sontdesidentificateursvalidesparcontre,1ieti:jnelesontpas.Ilestcependantdconseill
d'utiliser_commepremiercaractred'unidentificateurcarilestsouventemploypourdfinirles
variablesglobalesdel'environnementC.

Lesmajusculesetminusculessontdiffrencies.

Lecompilateurpeuttronquerlesidentificateursaudeld'unecertainelongueur.Cettelimitedpend
desimplmentations,maiselleesttoujourssuprieure31caractres.(Lestandardditqueles
identificateursexternes,c'estdireceuxquisontexportsl'ditiondelien,peuventtretronqus
6caractres,maistouslescompilateursmodernesdistinguentaumoins31caractres).

1.3.2Lesmotsclefs
Uncertainnombredemots,appelsmotsclefs,sontrservspourlelangageluimmeetnepeuvent
pastreutilisscommeidentificateurs.L'ANSICcompte32motsclefs:
auto const double float int short struct unsigned
break continue else for long signed switch void
case default enum goto register sizeof typedef volatile
char do extern if return static union while
quel'onpeutrangerencatgories

lesspcificateursdestockage

autoregisterstaticexterntypedef

lesspcificateursdetype

chardoubleenumfloatintlongshortsignedstruct
unionunsignedvoid

lesqualificateursdetype

constvolatile

lesinstructionsdecontrle

breakcasecontinuedefaultdoelseforgotoif

https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 3/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

switchwhile

divers

returnsizeof

1.3.3Lescommentaires
Uncommentairedbutepar/*etseterminepar*/.Parexemple,
/*Ceciestuncommentaire*/

Onnepeutpasimbriquerdescommentaires.Quandonmetencommentaireunmorceaude
programme,ilfautdoncveillercequeceluicinecontiennepasdecommentaire.

1.4Structured'unprogrammeC
Uneexpressionestunesuitedecomposantslmentairessyntaxiquementcorrecte,parexemple
x=0
oubien
(i>=0)&&(i<10)&&(p[i]!=0)

Uneinstructionestuneexpressionsuivied'unpointvirgule.Lepointvirgulesignifieenquelquesorte
``valuercetteexpression''.Plusieursinstructionspeuventtrerassemblespardesaccolades{et}
pourformeruneinstructioncomposeoublocquiestsyntaxiquementquivalentuneinstruction.Par
exemple,
if(x!=0)
{
z=y/x;
t=y%x;
}

Uneinstructioncomposed'unspcificateurdetypeetd'unelisted'identificateurssparsparune
virguleestunedclaration.Parexemple,
inta;
intb=1,c;
doublex=2.38e4;
charmessage[80];

EnC,toutevariabledoitfairel'objetd'unedclarationavantd'treutilise.

UnprogrammeCseprsentedelafaonsuivante:
[directivesauprprocesseur]
[dclarationsdevariablesexternes]
[fonctionssecondaires]

main()
{dclarationsdevariablesinternes
instructions
https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 4/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

Lafonctionprincipalemainpeutavoirdesparamtresformels.Onsupposeradansunpremiertemps
quelafonctionmainn'apasdevaleurderetour.Ceciesttolrparlecompilateurmaisproduitun
messaged'avertissementquandonutilisel'optionWalldegcc(cf.chapitre4).

Lesfonctionssecondairespeuventtreplacesindiffremmentavantouaprslafonctionprincipale.
Unefonctionsecondairepeutsedcriredelamaniresuivante:
typema_fonction(arguments)
{dclarationsdevariablesinternes
instructions
}

Cettefonctionretourneraunobjetdontletypeseratype(l'aided'uneinstructioncommereturn
objet;).Lesargumentsdelafonctionobissentunesyntaxevoisinedecelledesdclarations:on
metenargumentdelafonctionunesuited'expressionstypeobjetsparespardesvirgules.Par
exemple,lafonctionsecondairesuivantecalculeleproduitdedeuxentiers:
intproduit(inta,intb)
{
intresultat;

resultat=a*b;
return(resultat);
}

1.5Lestypesprdfinis
LeCestunlangagetyp.Celasignifieenparticulierquetoutevariable,constanteoufonctionestd'un
typeprcis.Letyped'unobjetdfinitlafaondontilestreprsentenmmoire.

Lammoiredel'ordinateursedcomposeenunesuitecontinued'octets.Chaqueoctetdelammoire
estcaractrisparsonadresse,quiestunentier.Deuxoctetscontigusenmmoireontdesadresses
quidiffrentd'uneunit.Quandunevariableestdfinie,illuiestattribuuneadresse.Cettevariable
correspondraunezonemmoiredontlalongueur(lenombred'octets)estfixeparletype.

Lataillemmoirecorrespondantauxdiffrentstypesdpenddescompilateurstoutefois,lanorme
ANSIspcifieuncertainnombredecontraintes.

LestypesdebaseenCconcernentlescaractres,lesentiersetlesflottants(nombresrels).Ilssont
dsignsparlesmotsclefssuivants:

char
int
float double
short long unsigned

1.5.1Letypecaractre
Lemotclefchardsigneunobjetdetypecaractre.Uncharpeutcontenirn'importequellmentdu
jeudecaractresdelamachineutilise.Laplupartdutemps,unobjetdetypecharestcodsurun
octetc'estl'objetlepluslmentaireenC.Lejeudecaractresutiliscorrespondgnralementau
codageASCII(sur7bits).LaplupartdesmachinesutilisentdsormaislejeudecaractresISO8859
https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 5/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

(sur8bits),dontles128premierscaractrescorrespondentauxcaractresASCII.Les128derniers
caractres(codssur8bits)sontutilisspourlescaractrespropresauxdiffrenteslangues.La
versionISO88591(aussiappeleISOLATIN1)estutilisepourleslanguesd'Europeoccidentale.
Ainsi,lecaractredecode232estle,lecaractre233correspondau...Pourplusdedtailssur
l'historiqueducodagedescaractrespourlesdiffrenteslanguesainsiquesurlanormeUNICODE
(sur16bits,quipermetdecoderlescaractrespourtoutesleslangues)etsurlanormeISO/IEC
10646(sur32bits,cequipermetd'ajouterlescaractresanciens),consulterl'articledeJ.Andret
M.Goossens[1].

dc. oct. hex. dc. oct. hex. dc. oct. hex.


32 40 20 @ 64 100 40 ` 96 140 60
! 33 41 21 A 65 101 41 a 97 141 61
" 34 42 22 B 66 102 42 b 98 142 62
# 35 43 23 C 67 103 43 c 99 143 63
$ 36 44 24 D 68 104 44 d 100 144 64
% 37 45 25 E 69 105 45 e 101 145 65
& 38 46 26 F 70 106 46 f 102 146 66
' 39 47 27 G 71 107 47 g 103 147 67
( 40 50 28 H 72 110 48 h 104 150 68
) 41 51 29 I 73 111 49 i 105 151 69
* 42 52 2a J 74 112 4a j 106 152 6a
+ 43 53 2b K 75 113 4b k 107 153 6b
, 44 54 2c L 76 114 4c l 108 154 6c
45 55 2d M 77 115 4d m 109 155 6d
. 46 56 2e N 78 116 4e n 110 156 6e
/ 47 57 2f O 79 117 4f o 111 157 6f
0 48 60 30 P 80 120 50 p 112 160 70
1 49 61 31 Q 81 121 51 q 113 161 71
2 50 62 32 R 82 122 52 r 114 162 72
3 51 63 33 S 83 123 53 s 115 163 73
4 52 64 34 T 84 124 54 t 116 164 74
5 53 65 35 U 85 125 55 u 117 165 75
6 54 66 36 V 86 126 56 v 118 166 76
7 55 67 37 W 87 127 57 w 119 167 77
8 56 70 38 X 88 130 58 x 120 170 78
9 57 71 39 Y 89 131 59 y 121 171 79
: 58 72 3a Z 90 132 5a z 122 172 7a
59 73 3b [ 91 133 5b { 123 173 7b
< 60 74 3c \ 92 134 5c | 124 174 7c
= 61 75 3d ] 93 135 5d } 125 175 7d
> 62 76 3e ^ 94 136 5e ~ 126 176 7e
? 63 77 3f _ 95 137 5f DEL 127 177 7f

https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 6/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

Table1.1:CodesASCIIdescaractresimprimables

UnedesparticularitsdutypecharenCestqu'ilpeuttreassimilunentier:toutobjetdetypechar
peuttreutilisdansuneexpressionquiutilisedesobjetsdetypeentier.Parexemple,sicestdetype
char,l'expressionc+1estvalide.ElledsignelecaractresuivantdanslecodeASCII.Latable
prcdentedonnelecodeASCII(endcimal,enoctaletenhexadcimal)descaractresimprimables.
Ainsi,leprogrammesuivantimprimelecaractre'B'.

main()
{
charc='A';
printf("%c",c+1);
}

Suivantlesimplmentations,letypecharestsignounon.Encasdedoute,ilvautmieuxprciser
unsignedcharousignedchar.Notonsquetouslescaractresimprimablessontpositifs.

1.5.2Lestypesentiers
Lemotclefdsignantletypeentierestint.Unobjetdetypeintestreprsentparunmot``naturel''
delamachineutilise,32bitspourunDECalphaouunPCIntel.

Letypeintpeuttreprcdd'unattributdeprcision(shortoulong)et/oud'unattributde
reprsentation(unsigned).Unobjetdetypeshortintaaumoinslatailled'uncharetaupluslataille
d'unint.Engnral,unshortintestcodsur16bits.Unobjetdetypelongintaaumoinslataille
d'unint(64bitssurunDECalpha,32bitssurunPCIntel).

DECAlpha PCIntel(Linux)
char 8bits 8bits caractre
short 16bits 16bits entiercourt
int 32bits 32bits entier
long 64bits 32bits entierlong
longlong n.i. 64bits entierlong(nonANSI)

Table1.2:Lestypesentiers

Lebitdepoidsfortd'unentierestsonsigne.Unentierpositifestdoncreprsentenmmoireparla
suitede32bitsdontlebitdepoidsfortvaut0etles31autresbitscorrespondentladcomposition
del'entierenbase2.Parexemple,pourdesobjetsdetypechar(8bits),l'entierpositif12sera
reprsentenmmoirepar00001100.Unentierngatifest,lui,reprsentparunesuitede32bits
dontlebitdepoidsfortvaut1etles31autresbitscorrespondentlavaleurabsoluedel'entier
reprsentesuivantlatechniqueditedu``complment2''.Celasignifiequel'onexprimelavaleur
absoluedel'entiersousformebinaire,quel'onprendlecomplmentairebitbitdecettevaleuretque
l'onajoute1aursultat.Ainsi,pourdesobjetsdetypesignedchar(8bits),1serareprsentpar
11111111,2par11111110,12parpar11110100.Unintpeutdoncreprsenterunentierentre231
et(231 1).L'attributunsignedspcifiequel'entiern'apasdesigne.Ununsignedintpeutdonc
reprsenterunentierentre0et(232 1).SurunDECalpha,onutiliseradoncundestypessuivantsen
https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 7/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

fonctiondelatailledesdonnesstocker:

signedchar [27 27 [
unsignedchar [028 [
shortint [215 215 [
unsignedshortint [0216 [
int [231 231 [
unsignedint [0232 [
longint(DECalpha) [263 263 [
unsignedlongint(DECalpha) [0264 [

Plusgnralement,lesvaleursmaximalesetminimalesdesdiffrentstypesentierssontdfiniesdans
lalibrairiestandardlimits.h.

Lemotclefsizeofapoursyntaxe
sizeof(expression)
oexpressionestuntypeouunobjet.Lersultatestunentiergalaunombred'octetsncessaires
pourstockerletypeoul'objet.Parexemple
unsignedshortx;

taille=sizeof(unsignedshort);
taille=sizeof(x);

Danslesdeuxcas,taillevaudra4.

Pourobtenirdesprogrammesportables,ons'efforceradenejamaisprsumerdelatailled'unobjetde
typeentier.Onutiliseratoujoursunedesconstantesdelimits.houlersultatobtenuenappliquant
l'oprateursizeof.

1.5.3Lestypesflottants
Lestypesfloat,doubleetlongdoubleserventreprsenterdesnombresenvirguleflottante.Ils
correspondentauxdiffrentesprcisionspossibles.

DECAlpha PCIntel
float 32bits 32bits flottant
double 64bits 64bits flottantdoubleprcision
longdouble 64bits 128bits flottantquadrupleprcision

Table1.3:Lestypesflottants

Lesflottantssontgnralementstocksenmmoiresouslareprsentationdelavirguleflottante
normalise.Oncritlenombresouslaforme``signe0,mantisseBexposant''.Engnral,B=2.Le
digitdepoidsfortdelamantissen'estjamaisnul.
https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 8/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

Unflottantestdoncreprsentparunesuitedebitsdontlebitdepoidsfortcorrespondausignedu
nombre.Lechampdumilieucorrespondlareprsentationbinairedel'exposantalorsquelesbitsde
poidsfaibleserventreprsenterlamantisse.

1.6Lesconstantes
Uneconstanteestunevaleurquiapparatlittralementdanslecodesourced'unprogramme,letypede
laconstantetantdterminparlafaondontlaconstanteestcrite.Lesconstantespeuventtrede4
types:entier,flottant(nombrerel),caractre,numration.Cesconstantesvonttreutilises,par
exemple,pourinitialiserunevariable.

1.6.1Lesconstantesentires
Uneconstanteentirepeuttrereprsentede3maniresdiffrentessuivantlabasedanslaquelleelle
estcrite:

dcimale:parexemple,0et2437348sontdesconstantesentiresdcimales.
octale:lareprsentationoctaled'unentiercorrespondsadcompositionenbase8.Les
constantesoctalesdoiventcommencerparunzro.Parexemple,lesreprsentationsoctalesdes
entiers0et255sontrespectivement00et0377.
hexadcimale:lareprsentationhexadcimaled'unentiercorrespondsadcompositionen
base16.Leslettresdeafsontutilisespourreprsenterlesnombresde1015.Les
constanteshexadcimalesdoiventcommencerpar0xou0X.Parexemple,lesreprsentations
hexadcimalesde14et255sontrespectivement0xeet0xff.

Pardfaut,uneconstantedcimaleestreprsenteavecleformatinternelepluscourtpermettantdela
reprsenterparmilesformatsdestypesint,longintetunsignedlonginttandisqu'uneconstante
octaleouhexadcimaleestreprsenteavecleformatinternelepluscourtpermettantencoredela
reprsenterparmilesformatsdestypesint,unsignedint,longintetunsignedlongint.

Onpeutcependantspcifierexplicitementleformatd'uneconstanteentireenlasuffixantparuouU
pourindiquerqu'elleestnonsigne,ouenlasuffixantparlouLpourindiquerqu'elleestdetype
long.Parexemple:

constante type

1234 int
02322 int/*octal*/
0x4D2 int/*hexadcimal*/
123456789L long
1234U unsignedint
123456789UL unsignedlongint

1.6.2Lesconstantesrelles

Lesconstantesrellessontreprsentesparlanotationclassiqueparmantisseetexposant.L'exposant
https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 9/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

estintroduitparlalettreeouEils'agitd'unnombredcimalventuellementsign.

Pardfaut,uneconstanterelleestreprsenteavecleformatdutypedouble.Onpeutcependant
influersurlareprsentationinternedelaconstanteenluiajoutantundessuffixesf(indiffremmentF)
oul(indiffremmentL).LessuffixesfetFforcentlareprsentationdelaconstantesousformed'un
float,lessuffixesletLforcentlareprsentationsousformed'unlongdouble.Parexemple:

constante type

12.34 double
12.3e4 double
12.34F float
12.34L longdouble

1.6.3Lesconstantescaractres
Pourdsigneruncaractreimprimable,ilsuffitdelemettreentreapostrophes(parex.'A'ou'$').
Lesseulscaractresimprimablesqu'onnepeutpasreprsenterdecettefaonsontl'antislashet
l'apostrophe,quisontrespectivementdsignspar\\et\'.Lepointd'interrogationetlesguillemets
peuventaussitredsignsparlesnotations\?et\".Lescaractresnonimprimablespeuventtre
dsignspar'\codeoctal'ocodeoctalestlecodeenoctalducaractre.Onpeutaussicrire
'\xcodehexa'ocodehexaestlecodeenhexadcimalducaractre(cf.pageX).Parexemple,'\33'
et'\x1b'dsignentlecaractreescape.Toutefois,lescaractresnonimprimableslesplusfrquents
disposentaussid'unenotationplussimple:

\n nouvelleligne \r retourchariot
\t tabulationhorizontale \f sautdepage
\v tabulationverticale \a signald'alerte
\b retourarrire

1.6.4Lesconstanteschanesdecaractres

Unechanedecaractresestunesuitedecaractresentourspardesguillemets.Parexemple,
"Ceciestunechanedecaractres"

Unechanedecaractrespeutcontenirdescaractresnonimprimables,dsignsparles
reprsentationsvuesprcdemment.Parexemple,
"ligne1\nligne2"

Al'intrieurd'unechanedecaractres,lecaractre"doittredsignpar\".Enfin,lecaractre\
suivid'unpassagelaligneestignor.Celapermetdefairetenirdelongueschanesdecaractressur
plusieurslignes.Parexemple,
"ceciestunelonguelonguelonguelonguelonguelonguelonguelongue\
chanedecaractres"

1.7Lesoprateurs
1.7.1L'affectation
EnC,l'affectationestunoprateurpartentire.Elleestsymboliseparlesigne=.Sasyntaxeestla
suivante:
https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 10/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

variable=expression
Letermedegauchedel'affectationpeuttreunevariablesimple,unlmentdetableaumaispasune
constante.Cetteexpressionapoureffetd'valuerexpressionetd'affecterlavaleurobtenue
variable.Deplus,cetteexpressionpossdeunevaleur,quiestcelleexpression.Ainsi,l'expressioni
=5vaut5.

L'affectationeffectueuneconversiondetypeimplicite:lavaleurdel'expression(termededroite)est
convertiedansletypedutermedegauche.Parexemple,leprogrammesuivant
main()
{
inti,j=2;
floatx=2.5;
i=j+x;
x=x+i;
printf("\n%f\n",x);
}

imprimepourxlavaleur6.5(etnon7),cardansl'instructioni=j+x;,l'expressionj+xat
convertieenentier.

1.7.2Lesoprateursarithmtiques
Lesoprateursarithmtiquesclassiquessontl'oprateurunaire(changementdesigne)ainsiqueles
oprateursbinaires

+ addition
soustraction
* multiplication
/ division
% restedeladivision(modulo)

Cesoprateursagissentdelafaonattenduesurlesentierscommesurlesflottants.Leursseules
spcificitssontlessuivantes:

Contrairementd'autreslangages,leCnedisposequedelanotation/pourdsignerlafoisla
divisionentireetladivisionentreflottants.Silesdeuxoprandessontdetypeentier,
l'oprateur/produiraunedivisionentire(quotientdeladivision).Parcontre,ildlivreraune
valeurflottantedsquel'undesoprandesestunflottant.Parexemple,
floatx;
x=3/2;

affectexlavaleur1.Parcontre
x=3/2.;

affectexlavaleur1.5.

L'oprateur%nes'appliquequ'desoprandesdetypeentier.Sil'undesdeuxoprandesest
ngatif,lesignedurestedpenddel'implmentation,maisilestengnrallemmequecelui
https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 11/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

dudividende.

Notonsenfinqu'iln'yapasenCd'oprateureffectuantl'lvationlapuissance.Defaongnrale,il
faututiliserlafonctionpow(x,y)delalibrairiemath.hpourcalculerxy.

1.7.3Lesoprateursrelationnels

> strictementsuprieur
>= suprieurougal
< strictementinfrieur
<= infrieurougal
== gal
!= diffrent

Leursyntaxeest
expression1opexpression2
Lesdeuxexpressionssontvaluespuiscompares.Lavaleurrendueestdetypeint(iln'yapasde
typeboolenenC)ellevaut1silaconditionestvraie,et0sinon.

Attentionnepasconfondrel'oprateurdetestd'galit==avecl'oprateurd'affection=.Ainsi,le
programme
main()
{
inta=0;
intb=1;
if(a=b)
printf("\naetbsontegaux\n");
else
printf("\naetbsontdifferents\n");
}

imprimel'cranaetbsontegaux!

1.7.4Lesoprateurslogiquesboolens

&& etlogique
|| oulogique
! ngationlogique

Commepourlesoprateursdecomparaison,lavaleurretourneparcesoprateursestunintqui
vaut1silaconditionestvraieet0sinon.

Dansuneexpressiondetype
expression1op1expression2op2...expressionn
l'valuationsefaitdegauchedroiteets'arrtedsquelersultatfinalestdtermin.Parexemple
dans
inti;
https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 12/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

intp[10];

if((i>=0)&&(i<=9)&&!(p[i]==0))
...

ladernireclauseneserapasvaluesiin'estpasentre0et9.

1.7.5Lesoprateurslogiquesbitbit
Lessixoprateurssuivantspermettentdemanipulerdesentiersauniveaudubit.Ilss'appliquentaux
entiersdetoutelongueur(short,intoulong),signsounon.

& et | ouinclusif
^ ouexclusif ~ complment1
<< dcalagegauche >> dcalagedroite

Enpratique,lesoprateurs&,|et~consistentappliquerbitbitlesoprationssuivantes
&01
000
101

|01
001
111

^01
001
110
L'oprateurunaire~changelavaleurdechaquebitd'unentier.Ledcalagedroiteetgauche
effectuentrespectivementunemultiplicationetunedivisionparunepuissancede2.Notonsqueces
dcalagesnesontpasdesdcalagescirculaires(cequidpassedisparat).

Considronsparexemplelesentiersa=77etb=23detypeunsignedchar(i.e.8bits).Enbase2il
s'criventrespectivement01001101et00010111.

valeur
expression binaire dcimale
a 01001101 77
b 00010111 23
a&b 00000101 5
a|b 01011111 95
a^b 01011010 90
~a 10110010 178
b<<2 01011100 92 multiplicationpar4
https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 13/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

b<<5 11100000 112 cequidpassedisparat


b>>1 00001011 11 divisionentirepar2

1.7.6Lesoprateursd'affectationcompose

Lesoprateursd'affectationcomposesont

+==*=/=%=&=^=|=<<=>>=

Pourtoutoprateurop,l'expression
expression1op=expression2
estquivalente
expression1=expression1opexpression2
Toutefois,avecl'affectioncompose,expression1n'estvaluequ'uneseulefois.

1.7.7Lesoprateursd'incrmentationetdedcrmentation
Lesoprateursd'incrmentation++etdedcrmentations'utilisentaussibienensuffixe(i++)qu'en
prfixe(++i).Danslesdeuxcaslavariableiseraincrmente,toutefoisdanslanotationsuffixela
valeurretourneseral'anciennevaleurdeialorsquedanslanotationprfixeseseralanouvelle.Par
exemple,
inta=3,b,c;
b=++a;/*aetbvalent4*/
c=b++;/*cvaut4etbvaut5*/

1.7.8L'oprateurvirgule

Uneexpressionpeuttreconstitued'unesuited'expressionssparespardesvirgules:
expression1,expression2,...,expressionn

Cetteexpressionestalorsvaluedegauchedroite.Savaleurseralavaleurdel'expressionde
droite.Parexemple,leprogramme
main()
{
inta,b;
b=((a=3),(a+2));
printf("\nb=%d\n",b);
}

imprimeb=5.

Lavirgulesparantlesargumentsd'unefonctionoulesdclarationsdevariablesn'estpasl'oprateur
virgule.Enparticulierl'valuationdegauchedroiten'estpasgarantie.Parexemplel'instruction
compose
{
inta=1;
printf("\%d\%d",++a,a);
}

https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 14/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

(compileavecgcc)produiralasortie21surunPCIntel/Linuxetlasortie22surunDEC
Alpha/OSF1.

1.7.9L'oprateurconditionnelternaire
L'oprateurconditionnel?estunoprateurternaire.Sasyntaxeestlasuivante:
condition?expression1:expression2
Cetteexpressionestgaleexpression1siconditionestsatisfaite,etexpression2sinon.Par
exemple,l'expression
x>=0?x:x

correspondlavaleurabsolued'unnombre.Demmel'instruction
m=((a>b)?a:b);

affectemlemaximumdeaetdeb.

1.7.10L'oprateurdeconversiondetype

L'oprateurdeconversiondetype,appelcast,permetdemodifierexplicitementletyped'unobjet.
Oncrit
(type)objet
Parexemple,
main()
{
inti=3,j=2;
printf("%f\n",(float)i/j);
}

retournelavaleur1.5.

1.7.11L'oprateuradresse
L'oprateurd'adresse&appliquunevariableretournel'adressemmoiredecettevariable.La
syntaxeest
&objet

1.7.12Rglesdeprioritdesoprateurs

Letableausuivantclasselesoprateursparordresdeprioritdcroissants.Lesoprateursplacssur
unemmeligneontmmepriorit.Sidansuneexpressionfigurentplusieursoprateursdemme
priorit,l'ordred'valuationestdfinieparlaflchedelasecondecolonnedutableau.Onprferera
toutefoismettredesparenthsesencasdedoute...
https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 15/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

oprateurs
()[]>.
!~++(unaire)(type)*(indirection)&(adresse)sizeof
*/%
+(binaire)
<<>>
<<=>>=
==!=
&(etbitbit)
^
|
&&
||
?:
=+==*=/=%=&=^=|=<<=>>=
,

Table1.4:Rglesdeprioritdesoprateurs

Parexemple,lesoprateurslogiquesbitbitsontmoinsprioritairesquelesoprateursrelationnels.
Celaimpliquequedansdestestssurlesbits,ilfautparenthserlesexpressions.Parexemple,ilfaut
crireif((x^y)!=0)

1.8Lesinstructionsdebranchementconditionnel
Onappelleinstructiondecontrletouteinstructionquipermetdecontrlerlefonctionnementd'un
programme.Parmilesinstructionsdecontrle,ondistinguelesinstructionsdebranchementetles
boucles.Lesinstructionsdebranchementpermettentdedterminerquellesinstructionsseront
excutesetdansquelordre.

1.8.1Branchementconditionnelifelse
Laformelaplusgnraleestcelleci:

if(expression1)
instruction1
elseif(expression2)
instruction2
...
elseif(expressionn)

https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 16/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

instructionn
else
instruction

avecunnombrequelconquedeelseif(...).Ledernierelseesttoujoursfacultatif.Laformela
plussimpleest

if(expression)
instruction

Chaqueinstructionpeuttreunblocd'instructions.

1.8.2Branchementmultipleswitch
Saformelaplusgnraleestcelleci:
switch(expression)
{caseconstante1:
listed'instructions1
break;
caseconstante2:
listed'instructions2
break;
...
caseconstanten:
listed'instructionsn
break;
default:
listed'instructions
break;
}

Silavaleurdeexpressionestgalel'unedesconstantes,lalisted'instructionscorrespondantest
excute.Sinonlalisted'instructionscorrespondantdefaultestexcute.L'instruction
defaultestfacultative.

1.9Lesboucles
Lesbouclespermettentderpterunesried'instructionstantqu'unecertaineconditionn'estpas
vrifie.

1.9.1Bouclewhile

Lasyntaxedewhileestlasuivante:

while(expression)
instruction

Tantqueexpressionestvrifie(i.e.,nonnulle),instructionestexcute.Siexpressionestnulleau
dpart,instructionneserajamaisexcute.instructionpeutvidemmenttreuneinstruction
compose.Parexemple,leprogrammesuivantimprimelesentiersde19.
i=1;

https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 17/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

while(i<10)
{
printf("\ni=%d",i);
i++;
}

1.9.2Boucledowhile
Ilpeutarriverquel'onneveuilleeffectuerletestdecontinuationqu'aprsavoirexcutl'instruction.
Danscecas,onutiliselaboucledowhile.Sasyntaxeest

do
instruction
while(expression);

Ici,instructionseraexcutetantqueexpressionestnonnulle.Celasignifiedoncqueinstruction
esttoujoursexcuteaumoinsunefois.Parexemple,poursaisirauclavierunentierentre1et10:
inta;

do
{
printf("\nEntrezunentierentre1et10:");
scanf("%d",&a);
}
while((a<=0)||(a>10));

1.9.3Bouclefor

Lasyntaxedeforest:

for(expr1;expr2;expr3)
instruction

Uneversionquivalenteplusintuitiveest:

expr1;
while(expr2)
{instruction
expr3;
}

Parexemple,pourimprimertouslesentiersde09,oncrit:
for(i=0;i<10;i++)
printf("\ni=%d",i);

Alafindecetteboucle,ivaudra10.Lestroisexpressionsutilisesdansuneboucleforpeuventtre
constituesdeplusieursexpressionssparespardesvirgules.Celapermetparexempledefaire
plusieursinitialisationslafois.Parexemple,pourcalculerlafactorielled'unentier,onpeutcrire:
intn,i,fact;
for(i=1,fact=1;i<=n;i++)
fact*=i;
printf("%d!=%d\n",n,fact);

Onpeutgalementinsrerl'instructionfact*=i;danslaboucleforcequidonne:
intn,i,fact;
https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 18/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

for(i=1,fact=1;i<=n;fact*=i,i++);
printf("%d!=%d\n",n,fact);

Onviteratoutefoiscetyped'acrobatiesquin'apportentrienetrendentleprogrammedifficilement
lisible.

1.10Lesinstructionsdebranchementnonconditionnel
1.10.1Branchementnonconditionnelbreak

Onavulerledel'instructionbreak;auseind'uneinstructiondebranchementmultipleswitch.
L'instructionbreakpeut,plusgnralement,treemployel'intrieurden'importequelleboucle.
Ellepermetd'interrompreledroulementdelaboucle,etpasselapremireinstructionquisuitla
boucle.Encasdebouclesimbriques,breakfaitsortirdelabouclelaplusinterne.Parexemple,le
programmesuivant:
main()
{
inti;
for(i=0;i<5;i++)
{
printf("i=%d\n",i);
if(i==3)
break;
}
printf("valeurdeialasortiedelaboucle=%d\n",i);
}

imprimel'cran
i=0
i=1
i=2
i=3
valeurdeialasortiedelaboucle=3

1.10.2Branchementnonconditionnelcontinue

L'instructioncontinuepermetdepasserdirectementautourdebouclesuivant,sansexcuterlesautres
instructionsdelaboucle.Ainsileprogramme
main()
{
inti;
for(i=0;i<5;i++)
{
if(i==3)
continue;
printf("i=%d\n",i);
}
printf("valeurdeialasortiedelaboucle=%d\n",i);
}

imprime
i=0
i=1
https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 19/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

i=2
i=4
valeurdeialasortiedelaboucle=5

1.10.3Branchementnonconditionnelgoto
L'instructiongotopermetd'effectuerunsautjusqu'l'instructionetiquettecorrespondant.Elleest
proscriredetoutprogrammeCdignedecenom.

1.11Lesfonctionsd'entressortiesclassiques
Ils'agitdesfonctionsdelalibrairiestandardstdio.hutilisesaveclesunitsclassiquesd'entres
sorties,quisontrespectivementleclavieretl'cran.Surcertainscompilateurs,l'appellalibrairie
stdio.hparladirectiveauprprocesseur

#include<stdio.h>

n'estpasncessairepourutiliserprintfetscanf.

1.11.1Lafonctiond'critureprintf

Lafonctionprintfestunefonctiond'impressionformate,cequisignifiequelesdonnessont
convertiesselonleformatparticulierchoisi.Sasyntaxeest
printf("chanedecontrle",expression1,...,expressionn);

Lachanedecontrlecontientletexteafficheretlesspcificationsdeformatcorrespondant
chaqueexpressiondelaliste.Lesspcificationsdeformatontpourbutd'annoncerleformatdes
donnesvisualiser.Ellessontintroduitesparlecaractre%,suivid'uncaractredsignantleformat
d'impression.Lesformatsd'impressionenCsontdonnslatable1.5.

Enplusducaractredonnantletypedesdonnes,onpeutventuellemntprcisercertainsparamtres
duformatd'impression,quisontspcifisentrele%etlecaractredeconversiondansl'ordresuivant:

largeurminimaleduchampd'impression:%10dspcifiequ'aumoins10caractresseront
rservspourimprimerl'entier.Pardfaut,ladonneseracadredroiteduchamp.Lesigne
avantleformatsignifiequeladonneseracadregaucheduchamp(%10d).
prcision:%.12fsignifiequ'unflottantseraimprimavec12chiffresaprslavirgule.Demme
%10.2fsignifiequel'onrserve12caractres(incluantlecaractre.)pourimprimerleflottant
etque2d'entreeuxsontdestinsauxchiffresaprslavirgule.Lorsquelaprcisionn'estpas
spcifie,ellecorrespondpardfaut6chiffresaprslavirgule.Pourunechanedecaractres,
laprcisioncorrespondaunombredecaractresimprims:%30.4ssignifiequel'onrserveun
champde30caractrespourimprimerlachanemaisqueseulementles4premierscaractres
serontimprims(suivisde26blancs).

format conversionen criture


%d int dcimalesigne
%ld longint dcimalesigne
%u unsignedint dcimalenonsigne
%lu unsignedlongint dcimalenonsigne

https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 20/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

%o unsignedint octalenonsigne
%lo unsignedlongint octalenonsigne
%x unsignedint hexadcimalenonsigne
%lx unsignedlongint hexadcimalenonsigne
%f double dcimalevirgulefixe
%lf longdouble dcimalevirgulefixe
%e double dcimalenotationexponentielle
%le longdouble dcimalenotationexponentielle
%g double dcimale,reprsentationlapluscourteparmi%fet%e
%lg longdouble dcimale,reprsentationlapluscourteparmi%lfet%le
%c unsignedchar caractre
%s char* chanedecaractres

Table1.5:Formatsd'impressionpourlafonctionprintf

Exemple:
#include<stdio.h>
main()
{
inti=23674;
intj=23674;
longintk=(1l<<32);
doublex=1e8+1000;
charc='A';
char*chaine="chainedecaracteres";

printf("impressiondei:\n");
printf("%d\t%u\t%o\t%x",i,i,i,i);
printf("\nimpressiondej:\n");
printf("%d\t%u\t%o\t%x",j,j,j,j);
printf("\nimpressiondek:\n");
printf("%d\t%o\t%x",k,k,k);
printf("\n%ld\t%lu\t%lo\t%lx",k,k,k,k);
printf("\nimpressiondex:\n");
printf("%f\t%e\t%g",x,x,x);
printf("\n%.2f\t%.2e",x,x);
printf("\n%.20f\t%.20e",x,x);
printf("\nimpressiondec:\n");
printf("%c\t%d",c,c);
printf("\nimpressiondechaine:\n");
printf("%s\t%.10s",chaine,chaine);
printf("\n");
}

Ceprogrammeimprimel'cran:
impressiondei:
2367423674561725c7a
impressiondej:
23674429494362237777721606ffffa386
impressiondek:
000
4294967296429496729640000000000100000000
impressiondex:
1000.0000001.000000e+031000
1000.001.00e+03
1000.000000010000000000001.00000000001000000000e+03
https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 21/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

impressiondec:
A65
impressiondechaine:
chainedecaractereschainede

1.11.2Lafonctiondesaisiescanf
Lafonctionscanfpermetdesaisirdesdonnesauclavieretdelesstockerauxadressesspcifiespar
lesargumentsdelafonctions.
scanf("chanedecontrle",argument1,...,argumentn)
Lachanedecontrleindiqueleformatdanslequellesdonnesluessontconverties.Ellenecontient
pasd'autrescaractres(notammentpasde\n).Commepourprintf,lesconversionsdeformatsont
spcifiesparuncaractreprcddusigne%.Lesformatsvalidespourlafonctionscanfdiffrent
lgrementdeceuxdelafonctionprintf.

Lesdonnesentrerauclavierdoiventtresparespardesblancsoudes<RETURN>saufs'ils'agitde
caractres.Onpeuttoutefoisfixerlenombredecaractresdeladonnelire.Parexemple%3spour
unechanede3caractres,%10dpourunentierquis'tendsur10chiffres,signeinclus.

Exemple:
#include<stdio.h>
main()
{
inti;
printf("entrezunentiersousformehexadecimalei=");
scanf("%x",&i);
printf("i=%d\n",i);
}

Sionentreauclavierlavaleur1a,leprogrammeaffichei=26.

format typed'objetpoint reprsentationdeladonnesaisie


%d int dcimalesigne
%hd shortint dcimalesigne
%ld longint dcimalesigne
%u unsignedint dcimalenonsigne
%hu unsignedshortint dcimalenonsigne
%lu unsignedlongint dcimalenonsigne
%o int octale
%ho shortint octale
%lo longint octale
%x int hexadcimale
%hx shortint hexadcimale
%lx longint hexadcimale
%f float flottantevirgulefixe
%lf double flottantevirgulefixe
%Lf longdouble flottantevirgulefixe
%e float flottantenotationexponentielle
%le double flottantenotationexponentielle
%Le longdouble flottantenotationexponentielle
https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 22/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

%g float flottantevirgulefixeounotationexponentielle
%lg double flottantevirgulefixeounotationexponentielle
%Lg longdouble flottantevirgulefixeounotationexponentielle
%c char caractre
%s char* chanedecaractres

Table1.6:Formatsdesaisiepourlafonctionscanf

1.11.3Impressionetlecturedecaractres

Lesfonctionsgetcharetputcharpermettentrespectivementdelireetd'imprimerdescaractres.Il
s'agitdefonctionsd'entressortiesnonformates.

Lafonctiongetcharretourneunintcorrespondantaucaractrelu.Pourmettrelecaractreludans
unevariablecaractere,oncrit
caractere=getchar();
Lorsqu'elledtectelafindefichier,elleretournel'entierEOF(EndOfFile),valeurdfiniedansla
librairiestdio.h.Engnral,laconstanteEOFvaut1.

Lafonctionputcharcritcaracteresurlasortiestandard:
putchar(caractere);
Elleretourneunintcorrespondantl'entierluoulaconstanteEOFencasd'erreur.

Parexemple,leprogrammesuivantlitunfichieretlerecopiecaractreparcaractrel'cran.
#include<stdio.h>
main()
{
charc;

while((c=getchar())!=EOF)
putchar(c);
}

Pourl'excuter,ilsuffitd'utiliserl'oprateurderedirectiond'Unix:
programmeexecutable<nomfichier

Notonsquel'expression(c=getchar())dansleprogrammeprcdentapourvaleurlavaleurde
l'expressiongetchar()quiestdetypeint.Letest(c=getchar())!=EOFcomparedoncbiendeux
objetsdetypeint(signs).

Cen'estparcontrepaslecasdansleprogrammesuivant:
#include<stdio.h>
main()
{
charc;
do
{
c=getchar();
if(c!=EOF)
putchar(c);
}
while(c!=EOF);
}

https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 23/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

Ici,letestc!=EOFcompareunobjetdetypecharetlaconstanteEOFquivaut1.Siletypecharest
nonsignpardfaut,cetteconditionestdonctoujoursvrifie.Siletypecharestsign,alorsle
caractredecode255,y,seraconvertienl'entier1.Larencontreducaractreyseradoncinterprte
commeunefindefichier.Ilestdoncrecommanddedclarerdetypeint(etnonchar)unevariable
destinerecevoiruncaractrelupargetcharafindepermettreladtectiondefindefichier.

1.12Lesconventionsd'critured'unprogrammeC
Ilexistetrspeudecontraintesdansl'critured'unprogrammeC.Toutefoisneprendreaucune
prcautionaboutiraitdesprogrammesillisibles.Aussiexistetiluncertainnombredeconventions.

Onn'critqu'uneseuleinstructionparligne:lepointvirguled'uneinstructionoud'une
dclarationesttoujourslederniercaractredelaligne.
Lesinstructionssontdisposesdetellefaonquelastructuremodulaireduprogrammesoit
miseenvidence.Enparticulier,uneaccoladeouvrantemarquantledbutd'unblocdoittre
seulesursaligneouplacelafind'uneligne.Uneaccoladefermanteesttoujoursseulesursa
ligne.
Onlaisseunblanc
entrelesmotsclefsif,while,do,switchetlaparenthseouvrantequisuit,
aprsunevirgule,
departetd'autred'unoprateurbinaire.
Onnemetpasdeblancentreunoprateurunaireetsonoprande,nientrelesdeuxcaractres
d'unoprateurd'affectationcompose.
Lesinstructionsdoiventtreindentesafinquetouteslesinstructionsd'unmmeblocsoient
alignes.Lemieuxestd'utiliserlemodeCd'Emacs.

References
[1]
Andr(J.)etGoossens(M.).Codagedescaractresetmultilinguisme:del'AsciiUnicode
etIso/Iec10646.CahiersGUTenbergn.25em.2ex 20,mai1985.
http://www.gutenberg.eu.org/pub/GUTenberg/publications/cahiers.html.

[2]
Braquelaire(J.P.).MthodologiedelaprogrammationenC.
Dunod,2000,troisimedition.

[3]
Cassagne(B.).IntroductionaulangageC.
http://clips.imag.fr/commun/bernard.cassagne/Introduction_ANSI_C.html.

[4]
Delannoy(C.).ProgrammerenlangageC.Eyrolles,1992.

[5]
Faber(F.).IntroductionlaprogrammationenANSIC.
http://www.ltam.lu/Tutoriel_Ansi_C/.

[6]
https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 24/25
16/9/2015 Chapitre1:lesbasesdelaprogrammationenC

Kernighan(B.W.)etRichie(D.M.).TheCprogramminglanguage.PrenticeHall,1988,
secondedition.

[7]
Lon(L.)etMillet(F.).Csifacile.Eyrolles,1987.

[8]
Loukides(M.)etOram(A.).ProgrammingwithGNUsoftware.O'Reilly,1997.

[9]
Moussel(P.).LelangageC.http://www.mrc.lu/LangC/.

[10]
Sendrier(N.).Notesd'introductionauC.CoursdeDEA,UniversitdeLimoges,1998.

ThisdocumentwastranslatedfromLATEXbyHEVEA.

https://www.rocq.inria.fr/secret/Anne.Canteaut/COURS_C/chapitre1.html 25/25

Vous aimerez peut-être aussi