Upload
daniel-boucon
View
69
Download
7
Embed Size (px)
Citation preview
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 1/68
O'REILLY '
C - precis & concis
1Jc .r . . . . . I'". I".. CIfIn!lIIIIMI_~ .... ~r-:w
te~_ot'!lc:..IfI'."lIiIrIl[~gQ.1[IU
=~~~~:~O:~~oJr~ ''''' ..n''"un.ltmlilf~,
k trPt UII'I<Nl.mIIN' MPnII.,_P;jWm:II •."ldio'
b~~."'WII:IUrd1immn~IILJIIIJn,i~
~4lu~. La~lW"~nI ~uCr-mollil
DIdII,.dWittti'~;MII~,""4I!1Rr~HJUdI.owJ;
Ikblre .. ~~de~~~LlUfIopad"JII
-~.dcuJlli:meJRl1len~dr~~~bhil'llk:!l~
:iD1II1I(jd~,<,qul~
'Ie~~
·Iet ..... ~
·lCb1!.'(I{q_!I'otitMIJo~1
·bI~IOIIdr..~ol'IILljpIlI(~.Jo::.Bl.hn.
;,k~1
• L lm:ho. .' fI i1 I~~Ir I l1 '
·L1plooodf'lIorno!:n'lo*'<'.
'~~l:1bllwl"l:Ool·lca!l1l/'6ko!b~ •
• l"RdNrilftlliwlllin
~ ~ otdld'lk 1 'J f t * ' . . . . . ~ . • 1nIirro~~1mIcn m!Ie ~Irft mruaJf5 ~ b profIf""~1oa. tI.. IUrm.PrlIU
~1'Oriiill'rIW'iqo.oo;illrunt.\'f'lIIJtdrNIIfok"'~''''CIIII
~,tII O " ... -.-,Ibn.~ 1i:IV>1"*""",Cd CH
t L r r : : m... ,lItUIy..k REILLY '
R-/q, Priuz {; UJln K/~.Prlnz
Tmdua.ir.ur d#1'fjNi(9'I1if:iJB
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 2/68
l '~ di ti on o ri gi na l e de ce Iiv re a e t e p u b liee en A lle mag ne so us Ie titreC kurz & gut, I SBN 3 -89721 - 238 -2 .
© O 'RE ILLY Ver la g GmbH & Co ., 2 002 .
Couver ture con~uepar Hanna D Y E R .
Edit ion: Florence LEROY.
R ele au re : Laurent MOUCHARD.
Les program mes figuran t dans ce livre on t pour but d 'illusrrer les
su je ts t rai tes , IIn 'e st d on ne a uc un e g ara ntie q ua nt 1 1le ur fo nc tio nn e-
m en t u ne fo is co mp iles, asse m b les o u in terp retes da ns Ie cadre d'uneu ti li sa ti on p ro fe ss io rm e ll e o u commerciale,
© EDlT!ONS O'REILLY, Pa ri s, 2 003I SBN 2 -8 4 17 7- 24 7- 0
Toute representat ion ou reproduction, integrale ou part ielle, faite sans leconsen-
tement de l'aureur, de ses ayants droit, ou ayants cause, est illicite (loi du 11
mars 1957, alinea 1er de l'ar ticle 40). Cet te representat ion ou reproduct ion,
par quelque precede que ce soit, constituera lt une contrefacon sanctionnee
par leoarticles 425et sutvanrs d u C od e penal, La lo i du 11 mars 1957 autoriseuniquernent, aux rermes des alineas 2 et 3 de l'a rtic le 41, les copies ou repro-
ductions strictement reserveesa l 'usage prive du copisteet non destinees ii
line util isation collective d'une part et, d 'autre par t, lesa nalyses et les courses
citations dans un b ut d'exemple et d'illustration,
T ab le d es ma tie re s
Introduction
Elements fondamentauxStructure d 'un program me C ...Ieux de caracreres . . . . . . . .
ldentificateurs . . . . . . . . ....
Ca te go ri es e t portee de s identificateurs
Types elementairesTypes entiers .
Types flottants feels et complexes.
Le t ype void .
ConstantesConst an t es e n ti er es
Constantes reelles
Constantes caracteres et ch ain es de ca rac tere s .
Expressions et operateursOperateurs arithmetlques . . . . . . . . . . ..
Operateurs d'affectation . . . . .
Operateurs relationnels et operateurs logiquesOperateurs logiques .
Operateurs bit a bit . . . . . . .Oper at eu rs d 'a cc es a l a memo ir eAutres operateurs . .. . .
Conversions de typePromotion en tiere . . .. .Conversions arithmetiques usuelles .. . . . . . . . .
Conversions de type d es a ss ig na tio ns e t d es p oi n te ur s
InstructionsBlocs et expressionsIn stru cti on s d e s au tBoucles .
Bra nc hem en ts n o n c on di ti on n el s
1
2
2
4
6
7
9911
13
1414
1 5
16
1719
2 122
23
2425
2 6
2829
2 9
2 9
31
31
3234
36
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 3/68
VI Tabl e d e s ma ti er es
DeclarationsS yn tax e ge nerale et ex ern ples .
De c la ra ti on s c ompl exe s
VariablesClas se s d e mernori ation
In itialisatio n ..
Types derivesTypes enumeres . . . . . . . . . . .
S tr uc tu re s, u nio n s e t ehamp de b its
Tab leaux .
Poin teurs .
Q ua lific ate urs e t d efin itio ns d e ty pe
FonctionsProto types de fonctions . . . . . . . . . . . . . .Defin itions de fonction s . . . . . . . . . . . . . .
Appels de fonction . . . . . . . . . .
Fonctions I I nornbre d'argurnents variable,
Edition de liens
Directives au preprocesseur
Bibliotheque standard
Fichiers d'en-tete standard
Entrees-sorties 72Traiternent des erreurs pour les fonctions d'entrees-sorties 73
Fonc ti on s g ene ra le s d'acces aux fichiers . . 73
Ponctions d'entrees-sorties pour les fichiers . . . . . . . . . 76
Limites numeriques 84Intervalles de valeur des types entiers . . . . . . . . . . . 84
Intervalle de valeur et precision des types reels flottan ts . 85C lassification des nornb res en virgule flo ttan te . . . . . . 87
Fonctions mathernatiques 88Fonct ion s r nat hema ti qu es pour les types en tiers 89
Fonctions rn athematiques pour les t ypes reels flo ttan ts . 89
3838
39
40
4042
4242
43
48
50
5 3
55
56
57
59
60
61
63
70
71
Tabl e d e s ma ti er es VI I
Optim isation .
Ponctions rnathernatiques po ur les types f lo t ta n ts c ompl exe s
Macros generiques . . . . . . . . . . . . . . . . . . . . .
G es tio n d es erreurs pour Ie s f on ction s m athe rn atiqu es .
Environnem ent virgule flottan te .
Classification des caracteres
Gestion des chaines de caracteresConversions chaines - nombres .
Co nv ers io n d es caracteres mu lti-o cte ts .
Recherche et tri
Gestion des blocs rnemoire
Gestion dynamique de la memoire
Date et heure
Controle de processusC omm un icatio n av ec le sy teme d'exploitation .
Signaux .. . .
Sauts non locaux . . . . . . . . . . . , . . . . .
G estio n d es erreurs pour le s fonctions systeme
Internationa lisation
Index
91
92
94
95
95
9 8
100102
10 3
104
105
106
107
109109
110
111
1 1 1
112
117
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 4/68
Introduction
Introduction
L e l an ga ge C aete d ev elop pe d an s le s a nn ees so ix an te-dix pa r D en n is
R itc hi e a u sein d es lab orato ires B ell (M urray H ill, N ew J ersey , U SA )a l'c cc as io n d e l'im pleme nta tio n d u s ys te rn e d 'e xp lo ita ti on U n ix s ur
u n o rd in at eu r DEC PDP-11 . C trouve ses o rig in es d an s le langage
n on ty pe BCPL (B as ic C om b in ed P ro gr amm in g L an gu ag e, d ev elo pp epa r M . R ic hard s) et da ns Ie Ian gag e B (d ev elo pp e p ar K . Tho mp so n).
E n 1 97 8, B rian K ern ig ha n et D en nis R itc hie fo urn iren t la prem iered es crip tio n p ub liq ue d e C , c on nu e a ujo urd 'h ui SOilS Ie nom de stan-
d ard K&R"C.
C est un lan gage hautem en t portab le b ien ada p te a I 'a rch it ec tu re d e s
ord in ateu rs a ctu els. II e st en lui-rneme re lativ em en t c on cis e t c om -p or te p eu d 'e leme nts d ep en da nt d e la c on fig ura ti on rnaterielle. II n e
c on tie nt, p ar exernple, n i in str uc tio ns d 'e ntre e/s or tie n i te ch niq ue s
de g estio n d e la m em oire , L es fo nc tio ns qu i s e ch arg en t d e ce s t §.ch esson t d ispon ib l es comme e xt en sio n d e la b ib lio th eq ue C s ta nd ar d.
D e p ar sa c on ce ption , C p re se nte de s av an tag es sig nificatifs :
• u n c od e s ou rc e fa cile rn en r p or ta ble ;
• un code machine performan t ;
• d es c om pila te ur s d is po nib le s p ou r to us le s s y steme s c ou ra nts ,
Dans la prem iere partie de ce guide nous decrirons Ie langage C, las ec on de p artie e ta nt d ed ie €' it la b ib lio th eq ue C s ta nd ard , L a d es crip -
tion du langage C est basee sur la norm e A NSI X 3.1 59. C ette n orm ecorrespond it la n orm e intem ation ale IS O/IE C 9899 qui a ete adop-
tee par l'O rgan isation ln ternationale de N orm alisation en 1 990, etamendes en 1995 et 1 999. La norme ISO/lEe 9899 peut etre com -m andee sur Ie site w eb de I'AN SI :
http://www.iso.ch/iso/fr/I SOOn IineJrontpage.
La n orrne de 1 995 est recon nue par tous les com pilateurs courants,L es n ou ve lles ex ten sio ns de fin ies d an s la ve rsio n d e 1 999 (ap peleeA NS I C 99) ne son t pas en core im plan tees dan s b eaucoup de com pi-lateu rs, e t son t in diq uees d e m an iere sp ecifiq ue d an s c e livret.
C o nv en tio n s t yp og ra ph iq u es
L es c o n ve nt io ns t yp og ra ph iq ue s s ui va nt es s on t u ti ! i se es d a n s c e l iv re :
1. Par un aster isque entre parentheses comme pour: long long int(·)
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 5/68
2 Elemen ts j ondamen taux
LeMondeSans I ta li qu e
U tilise p ou r les n om s d e fic hie rs, de rep erto ires et les U RL .
TheSansMonoCondensedU tilis e p ou r I I's m ots -d es , le s id en tif ic ate ur s, II 's ty pe s d e d on -n ee s, Ie co de d es exernples.
TheSansMonoCondensed I ta l iqu e
Ut il is e pour I I ' s n om s d e v ar ia bl es .
T h e S a n s M o n o C o n d e n s e d G r a sUtil ise p our Ie typ e d es d on nee s d an s II 's a rg um en ts d 'un e fon c-tion,
Elements fondamentaux
U n p ro gramme C est c on stitu e d e m od ules d istin cts, n orn mesjsac-tions, qu i peuvent s'appeler rnutuellernent, Chaq u e f un ct io n e ff ec tu e
un e tach e d on nee , D es fo nctio ns p re tes it l'e mp lo i so nt fo urn ies p arl a b ib li ot he qu e s ta nd ar d, a c ha rg e p ou r Ie p ro gramr ne ur d 'e cr ire le s
autres fonctions dont il a besoin. Un nom particulier d e f on ct io n :ma in , d es ig ne la p remie re f on ct io n it @ tre app elee au d em arrag e d u
programme. Tou te s I I'S au tr es f on ctio ns s on t d es so ns -p ro grammes decelle-ci,
Structure d'un programme C
La f igu re 1m ontre la structure d 'un program me C. IIest form e desfonctions main e t a f ficherPage , et affiche Ie d eb ut d 'u n f ic hie r texte
don t on precise [e nom dans !a J igne de com mande apres que le pro-g ramme e st lan ce.
Le s i ns tr uc ti on s q ui c on st it ue nt II'S fonctions, le s d ec la ra ti on s e t le s
d irectiv es a u p rep roc esseu r ferm en t Ie c o de SO ll re e d 'u n p ro gramm eC, Pour le s p etits p ro gramm es , I e c od e source es t ecrit d an s u n s eu lfi "ch i er sourc e . Le s pro grammes C d e g ra nd e taille font appel 11pi us ieurs
fi ch ie rs so urc e q ui p eu ve nt € !t rem o dif ie s e t compiles separernem.
C hac un d e ce s fich ie rs co nrie nt d es fo nc tion s q ui ap pa rtie nn en t a
une un ite logique; par ex em ple, des fon ction s pour la sortie sur unterminal. Le s in fo rm atio ns r eq uis es d an s plusieurs f ic h ie rs so ur ce ,c or nr ne l es d ec la ra ti on s, s on t p la ce es d an s I I'Sf ic hi er s d 'e n- te te . C e ux -ci peuvent € !tre in du s d an s chaque fichier so urc e v ia la d ire ctiv e#include.
S tr uc tu re d 'u n p r ogr amme C 3
I' uebut.c. Ce progralMle aff'iche Ie debut
• d' un fichi er texte SUI Ia sortie 5fa ndard.* Usage : Debut < 'noo f1chien
***1
C o m m e . n l ll ir e s
#includ'e cstdio ,h,
# de fin e L IO N,S 22m~t lv es a u p re pr oc os se ur
void affich.rP"g.( H lE • ); II ,prototype FonctionmainO
int main ( int argc, c hal •• a Igv )
{ FILE *pf; int code_,o rtie ~ 0;
if(argc !. 2 )
(fplintf( stderr, "Usage: Debut <oil!l1fichier>\n" );
code sortie " 1;} -
else if ( ( pf • fopen( argv;[l ], "r" » _ . NUll )
{
}
else{
fPI in t f ( s td err , •Erreur ouvertere f ich ie'! !\0" );
code_soltie - 2;
a ffL ch e r Page ( pf );fclose ( pf );
I .return code_sortIe;
Au t re s f on c t lo n s
void afficheIPage( FILE 'pf) /I Mfiohe une page ecran
{ .lo t compt " o·char ligne[81j;whHe ( compt c l fG NES ~ fgets( ligne, 81, pf ) !.NUll ){
fputs( lign", stdout );++compt ;
Figure 1. U n c ode s ou rc e C
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 6/68
4 Elements f ondamen tau»
L e n om des fichiers source se terrn i n e par .C ou .cpp, c elu i d es fi ch i er s
d 'e n- te te p ar .h. Un fich ie r so urc e et le s fich iers d 'en -tete q ui I'ac com-
pagnent ferment une un it e d e t ra du ct ion .
Les fonctions peuvent ete definies dans un ordre quelconque. La
fonction afficherPage de la figure 1 pourrait aussi b ien etre pla-
cee avant la fonction m a i n . Toutefois, une fon ction n e peut p as e tr edefinie a l'interieur d 'un e au tre fo nc tio n.
Le compilareur traite les fichiers so urce e n seq ue nce et decompose
leur contenu en tokens, comme les noms de fonctions ou les opera-
teurs, Les tokens peuven t etre separes par un ou plusieurs caracteres
d'espacem en t: espace, tab ulatio n, n ouvelle lign e, etc. S eul com pte
l'ordre des token s dan s Ie fichier, L a presentation du code source -
in den tation au passage Ii la ligne, par exemple - rnerne si elle est
indispensable a une bonne relecture du code source, n 'a pas d'irn-
portance po u r te com pilateur, Les d irec ti v e s au prep ro ces seur font ton-
t efo is excep tion Ii cette regie. C e so nt des co mm an des que le prepro -cesseur doitex ecuter avant que Ie program me Iui-rn em e so it com -
pile, et chacune d'entre elles dolt occuper une ligne Ii part entiere,comrnencant pa r un caractere diese #.
Toute chain e de caracteres c ompr is e e ntr e 1* et *1, o u en tre II et
la fin d'une lign e con stitue un commen ta i r e . Dan s le s p ha se s p re lir ni-
n aires de la traduction , avan t que Ie m oind re code objet soit gen ere,
chaque corn men taire est rern place par un espace, Pui s l es d ir ec ti ve s
a u p re pr oc es se ur s on t e xe cu te es .
je ux de c ara cte re sDeux jeux de caracteres sont dennis dans Ie cadre du CANS!. Le
p remie r, a pp ele j eu d e c ar ac te re s s ou rc e, c or re sp on d a I'e ns emb le d es
caracteres que l'o n peut utiliser dan s un fichier so urce. L e seco nd, le
jeu de caracteres d'ex ecutio n, est fo rm e de taus les caracteres in ter-
pretes lars de I'ex ecutio n du pro gramme, par ex em ple les caracteresd'une constants chaine.
Chacun de ces ensem bles contien t un jeu de caracteres de base quicomprend :
• L es 52 1ettres (m in uscules et m ajuscules) de l'alphab et latin :
AB CDE FGH lJ K LM N OPQRSTUVW X YZ
abc d efg h ij k J m nap q r s t II VW X yz ;
• L es dix chiffres de b ase du systern e decim al (Ii c haqu e c ar ac te re
suivan t 0 correspon d un e valeur superieure de 1 a la valeur de
J eux de caraaeres 5
c elu i q ui I e p re ce de ):
0123456789i
• les 2 9 caracteres graphiques suivan ts .:!"#%&'()*+,- ..:i j
<=>?[ l"_{I}-i
• le s c in q c ar ac te re s d 'e sp ac em en t:esp ace, ta bu latio n ho ri z on tale, tab ula tio n v ertic ale, reto ur ch a-
riot, saut d e p ag e.
Le jeu de caracteres d'execution de base com prend en plus .:
• Ie ca ra ctere NU L note \0 q ui te rm in e le s c ha in es d ec ar ac te re s:
• le s c ar ac te re s de contr6 le , representes pa r les sequences d'echap-
pernent stan da rd du ta blea u 1 ,. qui perm etten t de gerer l es p e-
ripheriques d e sor ti e (terrninaux, imprimantes, etc.),
Tableau 1. Le s s eq u en c e s d 'e c hap p eme l1 t s ta n da rd
Sequenced'echappernent
Effet sur le peripherique d'affichage
\a
\b
\f
\n
\r\t
S i gn a 1 sonore (beep)
Retour en arriere
Saut d e p ag e
Finde l igne
Retour chariotTabulation horizonta le
\ v Tabulation verticale
\ ' Le c a r a c t e re '
\ " L e c a r a c t e r e "
\ ? L e c a r a ct er e ?
\ \ L e c a r a c t e r e \
\0 \ 0 0 \ 00 0 Lecaractere corresponda n t a cecode oct al(0" chiffreoctal)
\xh. . Lecaracrere correspondanra ce code hexadecimal( h .. c ha in e decbiffreshexadecimaux)
Tout autre caractere - rnais cela depen d de vo tre co rn pilateur, peutetre utilise dan s les com men taires, les chain es et les constan tes ca-
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 7/68
6 Elimentsjondamentaux
r ac re re s ( le c ar ac te re d olla r a u les c ara ct ere s a cc en tu es , p ar exern pie).
N ote z qu e l'utilisation de t e ls carac te res peut nuire 11Ia por tabi li te
d e v as p ro gr ammes .
L 'en sem ble d e tau s le s c ara cteres u tilisab les est a pp ele jeu de ca rac -
tere s eten du , c'e st to ujo urs u n su r-en sem ble du jeu d e c ar ac te re s d e
base.
C erta in es la ngu e, u tilise nt d es ca rac tere s q ui n ecessite nt un co dag e
s ur p lu sie ur s o ct ets t. C es c ara cte re s m ulti-o cte ts p eu ve nt e tre in du s
dans le jeu de car ac te re s e te ndu . En outre, AN SI C99 est pourvu dutyp e e ntier w cha r _t ( wid e c ha ra c te r ty pe ,. t yp e car ac te re etendu) qu i
est assez gran d pour representer n 'im porte quel caractere du jeu decaractere s ete nd u, L 'en co dag e U nic od e e st m ain ten an t tres so uve nt
u tilise, ce q ui p erm et d e pa sse r d u c od e A SC II stan dard 1 1 un cod a ge
o il p res d e 35000 car ac te re s p ro ven ant de 24 pays peuvent e tr e r ep re -sentes,
C 99 in tro du it aussi les trigraphes ( se qu en ce s d e 3 caracteres), Ces se -
q ue nc es p erm etten t la sa isie d e caracte res g ra ph iq ues q ui n e so nt p asd is po nib le s s ur ta us le s c la vie rs (v oir le t ab le au 2). Le trigraphe??.!,
pa r e xer np le , p eu t etre saisi pour representer Ie caractere "tube" ( I ).
Tableau 2 : Les trigraphes
p-rigraphe
Signification
Identif icateurs
Le terme iden ti fi ca teu r designe I e n om d es v aria ble s, de s fonctions,d es m ac ro -in stru ctio ns , d es ty pe s, e tc . L es id en tif ic ate ur s obeissent
a ux re gle s de const ruc t ion SIlivantes:
• U n id en tific ateu r est form e d'une s ui te d e leu re s (A a 2 ., a a z) ,de chiffres (0 a 9) 01.1de caracteres de soulignage (_) ;
• Le premier caractere d'un identificateur ne pen t pas €tre unchiffre;
• L es id en tific ate urs s on t s en sib le a la casse ;
1. NdT: L'l.Isageveut que I'on traduise en francais Ieterme an~lais byte par octe t . 11
ne faudra toutefois pas oublier que cela nc signifie pas toujou rS 8 bits
Ca t eg o ri es e t p o rt ee d e s i de n ti fi ca te u rs 7
• Iin 'y p as d e lim ite 1 1la lo ng ue ur d 'u n id en tific ate ur. T ou te fo is ,se uls le s 3 1 premiers ca ra ct er es s en t e n g en er a! significatifs.
Le s mots-des sont reserve s et n e d oiv en t p as erre uti Iise s c omm e id en -
rificateurs, Void u ne liste de mo ts -d e s:
auto enum restrict(*) unSigned
brea.k ex tern return void
case float short volatile
char for signed while
const goto sizeof Bool(*)
continue if static _Complex(*)
default inline(*) struct _Imaginary(*)
do in t switch
double long typedef
else register unionLes n oms e a emes , c 'e st -a -d ir e l es id en tificate urs d e fon ctio ns et d e
variables e xte rn es I ie es p eu ve nt fa ire I 'ob jet d'autres r es tr ic ti on s q ui
dependen t de l'editeur de lie ns. P our de s pro grammes C p ortab les,seuls les 8 premiers caracteres d es n om s externes ne devraient etre
s ignif icat lf s, meme 5i l'editeur d e lie ns n 'e st p a s sensible a l a ca sse.
Void quel q ues ex er np le s d'identificateurs:
Valides:a ,DM,dm,FLDAT,_van , HautDeFene tre ;
Non valides:d o, 5 86 cp u, z%hl er , n l- fl ag , US_$ .
Ca t eg orie s e t portee des iden t if ica t eursTou t i de nt if ic at eu ra pp ar ti en t 1 1 'u ne d es q ua tr e c at eg or ie ss ui va nt es :
• Les noms d'etiquettes ;
• Les marqueurs d e s tr uc tu re , d 'u n io n et d'enu meration, Ce s on tde s identificateurs places a la s ui te d es mo ts -d es struct, unione t e num ( v oi r Types der iv es , infra);
• L es n om s des m em bres d'une structure 01.1 d'une union.Chaque s tr uc tu re au un io n p ossed e u n esp ac e d e n om s d istin ct
pour ses membres;
• Taus l es au tr es i den ti fi ca teu rs , a ppe le s iden ti fica tellrs ordinaires
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 8/68
8 E le me nts fo nda m en ta ux
Des iden ti fi ca teu rs appa rt en an t a d es c at eg o ri es d if fe re nc es p eu ve n t~ tre id en tiq ue s, U n n om d 'e tiq uette p eu t aussi, pa r exernple, e tr e u ti -lise comrne nom de fonction . Un tel reemploi est fre qu en t d an s le s
stru ctu re s o u la rnerne c ha in e p eu t d es ig ne r un ty pe s tr uc tu re , l'u nd e ses m em bre s, et u ne v aria ble .
struct p e r so n { c h ar * p e r s o n ; 1 * . . .*/ } p e r s o n n e ;
Les m em es n om s peuven t aussi designer les mem b re s d e s tr uc tu re sd i f fe re n tes .
C ha qu e id en tifica te ur d an s Ie co de so urce p osse de u ne ce rta in e p or-te e. C ett e portee correspond a Ia portion de program me dans la -
q ue lle l 'id en tif ic ar eu r p eu t h re emp lo ye . Les qua tr e por te es possiblessont:
Pro to t yp e d 'un e fona i on
Les i de n ti fi ca te ur s c on te n us d an s l a I is te d es d ec la ra ti on s d e p a-
ram etre s d u p ro to ty pe d 'u ne fo nctio n (p as d an s sa d efin itio n)on t u ne p orte e c on fin ee 1 1 ce prototype j
Fonction
S eu ls l es n oms d 'e ti qu e tt es on t comm e portee Ie corps d 'une
fonction . Leur em ploi est lim ite au b loc de la fonction dan sJequel I'etiquette es t definie . L es noms d'etiquettes doivent
e tr e u n iq ue s a Iin te ri eu r d e l a fo nc ti on . L 'in str uc tio n g oto p ro -
voque un saut vers l 'in str uc tio n q ui s uit u ne e tiq ue tte a I'inre-ri eu r d e la fo nc tio n courante j.
Bloc L es id en tiftc ateu rs, a utre s q ue les n om s d 'etiq ue tte s, d ec la re s::. l'in terieur d 'un b loc an t un e portee confin ee a c e b lo c. Le sp ar am e tr es d e la d ef in it io n d 'u ne f on ctio n a nt aussi un e porteelim ite e a u b lo c. A l'ln terieu r d 'un b loc, la portee d 'un iden ti-ficateur c omm en ce av ec sa d efin itio n et se terrnine it I'accoladeferm an re (} ) d u b lo c;
Fichier
Les id en t if ic a teu rs d ecl ar es it l'e xte rieu r d e to ut b lo c o u liste d ep arame tr es a nt c orn rn e p or te e Ie f ic hie r l ui-m em e. L eu r p ort ee
commence a leur defin ition et se prolonge jusqu'a la fin duf ich ier source .
Types elrimentaires 9
Types elementaires
Le type d 'u n e v ar ia bl e d et erm in e I 'espace qu' el le o cc up e en rnernoire
et la facon don t sera in terpretee Ia sequence de b its stockee, De
rn em e, le t yp e d 'u n e fonction d ete rm in e la facon d on t s er a interpre-
te e sa v ale ur d e re to ur.
Le s ty pe s p eu ve nt e tre so it p redef in i s, so it d e ri ve s . Le s types predefi-
n is du C son t Ies typ es de ba se et le t yp e v oi d. Le s ty pe s d e b as e sont
constitues de s t yp e s e n ti er s et de s typesjlottGl1ts.
Ty p es e n tie rsO n denorn b re cinq types d 'en tiers signes: signed char, short in t
(au short), int, long in t (au long), et long long in t (') (au long
lo ng C ' )) . A chacun d e ce s t yp es c orre sp on d u n ty pe entier non signe
occupan t la m em e place en m em oire .. Le type n on sign e est design e
par le p re fix e u ns i gn ed devant le specif icateur de type , unstgned int,p a r exernple.D 'un poin t de vue formel, les types char, sign ed char et un sign ed
c ha r s on t d if fe re n ts , T o ut ef oi s, s el on l e p ar ar ne tr ag e d u c or np il at eu r,c ha r e st e qu iv ale nt Ii sign ed char ou a u nsig ne d c ha r. Le prefixe
signed n 'a aucun s en s p ou r les types short, in t, lon g et lon g 1 0n gC ')
p uisque ils son t toujours con sideres comme signes, Ainsi , short et
sign ed short d esig ne nt le rn ern e type.
L a p la ce o ccu pee e n m ern oire p ar les ty pe s en tie rs n 'est p as sp ecin ee .
Toutefois, ils peuven t etre classes par taille ; char <;= short < 0 0 in t< ;= long <;= long long(' ) .. En outre, l a tai ll e du type short est d'au
m oins 2 octets, celie du type long d'au rnoins 4 octets, et celle du
type long long (.) d 'au m ains 8 octets. Les valeur~ex trem es de ~esty pe s, p ou r u ne im ple me nta tio n d on ne e, so nt d efin ie s d an s Ie fich ieren-tete limits.h.
Le type B aal a ete ajoute dans AN SI C99 pour represen ter les va-leu rsb oo lee nn es. L a v aleu r b oo le en ne tru e e st re prese nte e p ar 1, etfals e p ar o . S i le fich ie r e n-te te stdbool.h a eU in clus, b oo l peu r etre
u tilise -P OU T _B oo l et les m ac ro s tru e e t fa lse res pe~ tiv em en t p ou r
1 et O . V ous trouverez d an s Ie tab leau 3 les types en ners stan dard etl eu rs i nt er va ll es d e v al eu r usuels,
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 9/68
10 Type s i lime ll tmre s
Tableau 3. Le s t yp e s e n ti er : standard
T y p e Taille en Intervalle de valeur
mernoire (decimal)
_Bool 1 octet Oet I
c h a r 1 o c t e t ·128 a 1 2 7 ou 0 1 1 . 255unsigned char 1 octet Oit2SS
sig n e d char 1 o c t e t . 128 a 12 7int 2 o u 4 o c t e t s · 327681132 7670u ·2147483648 a
2147483647
unsigned inr 2 ou 4 o c t e t s o I 1 6 S 535 o u
0114294967295
short 2,octets ·32768 a 32767unsigned short 2 octets o a 65535
long 4 octets ·2147483648 a 2147483647unsigned long 4 o c t e t s o a 4294967295long long(') 8 octets ·92233.72 036 854 7 7 S 808 1 1
9 2 2 3 3 7 2 03(, 8 S4 7 7 5 807
unsigned 8 octets 01118446744073 709 5 51 6 1 5
long long(*)
Les types entiers a taille definie om e t e introduits dans ANSI C99 pa r
l'intermediaire du fichier d'en·tete stdint.h(·) (voir Ie tableau 4). La
t ai il e N d'un entier correspond au nombre de b its utilises po ur re -p re se nte r le s v a le urs d an s ce type, b it de sign e y co mpris, (E n gen eralN=8,16,32 ou 64.)
Tableau 4 , L e s ty pe s e n tie rs Ii ta ii le di ji l1 ie
T y p e
La t a i l l e est e x a c r e r n e n t N bits
La tai ll e est d'au m ains N bits
Le type Ie plus r ap ide d 'uae t ai lle d ' a u mainsN bits
Le type e ntie r d e p lu s grande ta il lei m p l e m e n t e
Assez grand pour s tocker l a valeur d'un
pointeur
Signification
intN_t
int_leastN_t
i nt _ f as tN_ t
intmax t
intptr_t
Typesj /o t ta l1t s ree ls e t comp lex es 11
Par exemple, in t1 6_t est un type entier code sur exactement 1 6 bits
et int_fast32_t est I e ty pe entier le plus rapide co de sur 32 b its o u
plus. Ces types sent defin is pour des tailles N=8, 16, 32 et 64 bits.
D'autres tailles, comme int24 _t, sont op tio rme l le s , Par exernple :
int16_t val - ~10; II variable entiere
II t ai l l e : e xa ct er ne nt 1 6 bits
A chacun des types sign es que n ous venon s de decrire correspon d
un type non signe avec Ie prefixe u. Par exernple, uintmax t repre-
sen te le type entier non signe de la t ai lle l a p lu s g ra nd e pe rmise par
l'implernentation,
T yp e sflo tta n ts re e ls e t c omp le xe s
T ro is typ es s on t definis p our r ep re se n te r le s n orn bres reels : flo at,
double, long double. En C, ces trois types sont appeles ty pe s r ie ls
f/ottants.
La tail le en rn ern oire et la represen tation in tern e deces types n 'est
pas specifiee en C stan dard et peut varier selon Ie com pilateur. C e-
pendant, la plupart des compi la teu rs suivent la n orm e IEEE 754-
1985 po ur l'arirhrn etique b in aire en virgule flo tta nte, L e tableau 5
suit c et te no rme .
Tableau 5. L e s t y pes ree ls j lo t ta n t s
Type Taille en In tervalle de Precision
memoire valeur (decimal, (decimal)no n signe)
float 4 octets 1 .2E-38 it 3.4E+38 6 c h if f re s a p r e s la
virgule
double 8 octets 2.3E-308111 .7E+308 1 5 chiffres apres
la virgule
long 10 octets 3.4E-49321 11 .1 E+ 4932 1 9 chffres apres
double la virgule
Les con stan tes sym boliques qui decrivent tous les aspects d'un e re-presentation do nnee ( v o i r L im ite s n um eriq ue s e t classification de s
nombr~) sont definies dans Je fichier d'en-tetejlo(lt.h.
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 10/68
J2 Type s e l emen ta i re s
Re pre se nta tio n in te rn e de s n om bre s re els e n
v i rgu le j lo t tan t e
La representation d'un nombre en virgule flottante consiste toujours
en un signe s, une mantisse m,et un exposant ex p puissance de 2.
x = s * m * Y"'IJ} avec 1.0 < = m < 2 ou m = 0
C'est le nombre de bits utilises pour stocker la rnantisse qui deter-
mine la precision d'un type flottant. L'intervalle de valeur es t deter-
mine par Ie nombre de bits utilises pour l 'exposant,
La figure 2 illustre le format de stockage du type float en 32 bits
dans la representation IEEE.
S Exposan t M a n tis s e
Pos it io n du b it : 31 30 23 22 0
Figure 2. Format d e sto cka g« IE EE p ou r le typejloat 32 bits
Le bit de signe prend la valeur 1 pour les nombres negatifs et 0 pour
les autres. Le bit de poids fort de la mantisse est toujours a I , on ne
Ie represente pas. On ajoute un decalage, qui vaut 127 pour le type
float, a ] 'exposant avant de le stocker.
Par exernple, Ie nornbre -2,5 = = -l * 1,25 * 2l est stockee de la maniere
suivante :
S = 1 , E x p o s a n t = 1 + 12 7 : 1 2 8 , M an t i s s e = 0 . 2 5
T yp e s j lo tta n ts c om ple xe s
Des types flottants particuliers ant ete introduits en ANSI C99 pour
representer les nornbres complexes et les nombres imaginaires purs,
Tout nombre complexe peut etre represente en coordonnees carte-
siennes sous la forme:
l ~ + i*y
ou x et y sont de s nombres reels et i Ie nombreimaginaire unite.
Les nombres reels x et y sont appeles respectivement partie reelle etp artie im agin air e d e z.
Les nombres complexes peuvent aussi etre representes en coordon-
nees polaites :
z ; r * ( c o s ( t h e t a ) + i * s i n ( t h e t a »
ie type void 13
I 'angle theta est appele argument et le nornbre r module de z,
En C, les nornbres cornplexe sont representes par un couple partie
delle, partie imaginaire ; chaque partie etant du type float, double
ou long double. Les t yp e s f io tt an ts c ompl ex es correspond ant sont res-
pectivernent float_Complex, double_Complex et Iong double_Complex.
Les n om bre s im agin aire s p uts - c'est-a-dire les nombres complexes de
la forme z=i *y , avec y reel - peuvent etre representes par les types
float_Imaginary, double_Imaginary, et long double_Imaginary.
Les types flottants reels et complexes ferment I'ensemble des types
flottants,
Le type void
Le specificateur de type void indique qu'aucune valeur n'est dispo-
1 1 ible. II est utilise dans trois situations:
les expressions de types void.
IIexiste deux utilisations possibles des expression de type void.
Tout d'abord, on declare comme void les fonctions sans valeur
de retour. Par exemple :
void sortie (int statut)j
Ensuite, la convers ion (cast) explicite (void)expression qui
peut cetreutilisee lorsqu'on souhaite abandonner deliberement
la valeur d'une expression. Par exernple :
(void)printf( "Un exemple.");
Les prototypes de fonctions sans para metre.
Par exemple:
int rand(void);
Les pointeurs sur void.
Le type void * (prononcez «pointeur sur void ») represente
l'adresse d'un objet, mais pas Ie type de cet objet. De tels poin-
teurs «sans type» sont principalernent utilises dans les fonc-
tions qui peuvent €tre appelees avec com me arguments des
pointeurs vers des types differents. Par exemple:
void *memcpy(void *dest, void *source, size_t rlombre)j
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 11/68
14 Constantes
Constantes
T oute con stan te est une constante entiere, un e cons tame ftouante, un econstante caractere ou un e c o nsta n te c ha in e d e c ara c te re s. Nous v er ro n s
a us si , d an s la s ec tio n Types enumeris, le s c ens tan t e s enumere e s . Le t yp e
de chaque co nstan te est determ in e par sa valeur et sa n otation .
Con s ta n te s e n tie re s
L es co nstan tes en tieres so nt represen tees par des n om bres ex prim es
e n no ta ti on decimale, o eta le o u hexadecimale :
• une constante dicimale (base 10) com men ce par un c hif fr e q ui
n 'est pas zero ; pa r exemple: 1024;
• une c o nsta n te o ct aie (base 8) comm ence par un zero; par
exemple: 0 1 2 ;
• une c o n st a n te h e xa d e c ima l e (base 16) commence par un zero
s ui vi d 'u n x (Ox ou OX); p ar e x emp le : O X 7f , O X 7f , ox7F, O X 7 F .
Les chiffres hexadecimaux A, B, D, E et F ne so nt pas sensibles
al a casse,
S 'il n 'est pas indique de rnaniere explicite, Ie t ype d'une eonstante
entiere sera le p remier ty pe rencontre dans la hierarchie d es t yp es
q ui p eu ve nt re pres en to r s a v ale ur.
P our les constantes decirnales, la hierarchie des types est la suivanre:
i n t , l on g, u ns i g ne d l o n g , l on g l on g( * ) .
P our les constantes octaJes ou hexadecimales, la hierarchic d es t yp es
est:
i nt , u ns i g ne d i n t , l o n g , u n s i g n e d l on g, l o n g l o n g ( " ),
u n s i g n e d l o n g l o n g ( * ) .
A in si, les co nstan tes en tieres so nt n orm alern en t de type i n t o Le ty pe
peut aussi etre indique ex plicitem en t par I'un des suffix es L ou 1
(p ou r lo ng ), LL(') ou 11(*) (pour long 10ng(*» precede ou non de
U ou u (pour unsigned). Voyez le tableau 6 p ou r q ue lq ue s exernples,
Con st an te s r ee li es 15
Tableau 6. Exemples de constan tes entieres
Decimal Octal Hexadecimal Type
1 5 01 7 Oxf int
32767 077777 Ox7FFF int
IO U 012U OxAU unsigned in t
32768U OIOOOOOU Ox8000u IIn s ignedint
1 6 L 020L OxIOL long
27UL 033uJ OxlBUL uns igned long
L es m ac ro s du tab leau 7 ont ete definies pour representer de s
constantes d e ty pe entier a ve c u ne taille m ax im ale ou m in im aJ e don -
n ee. C hacun e de ces m acros pren d com me argum en t un e con stan te
en riere et sera rern placee par la rn em e con stan te m ais avec Ie typevoulu.
Tableau 7. Ma c ro s p o ur le s c o ns ta n te s e n iie re s d e W i lle e xtr em a le
Macro Type retourne
INTMAX_C ( )
U INTMAX_C ( )
INTN_CO
U INTN C O
in tmax t
u i n t m a x t
in t leastN t- -
uirit leastN t
Cons tan t e s reelles
Une c on st an te reelle est represen tee par un e suite de chiffres deci-
rnaux avec un p oi nt d ec im al , ou pa r un e n ota tio n av ec rnantisse etexposant, Voici quelques exernples:
41 . 9 5.67 E- 3 II le l1 0m br e 5 .6 7* 10 -:1
E peut aussi s'ecrire e. La l et tr e P ou pest utilisee pour representerline constanre reelle avec un ex po san t puissan ce de 2 (ANSI e99);
p ar e x emp le :
2 . 7 P + 6 1/ L e nombre 2 . 7 * 26
A ft.n de distin guer un e con stante reelle d'un e con stan te en tiere, Iepom t decim al ou la n otation avec ex posan t son t necessaires,
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 12/68
16 Constantes
Sauf indication contraire, une constante reelle est du type double. Le
suffixe L ou 1perrnet de lui affecter Ie type long double.
Les constantes de l'exempJe precedent sont toutes du type double,
12.34F est du type float, et 12.34L est du type long double.
Toutes des constantes suivantes ont du type double. Les constantes
de c haqu e r ang ee r ep re se n re n t la merne valeur:
5.19 0.S19E1 O.OS1ge+2 519E-2
12. 12.0 .12E2 l2eO
370000.0 37e+4 3.7E+S O.37e6
0.000004 4E-6 o Ae-S .4E-S
Cons t an t e s carac teres e t c ha in es de
carac teresUne c o n st an ie c a ra c te r e consiste en un ou plusieurs caracteres entre
guillemets simples. Par ex ern ple :
'0' 'A' 'ab'
Les con st an te s c ar ac te re s sont du type into La va leur d'une constante
caractere qui contient 1m caractere est don nee par la valeur nurne-
rique de la representation de ce caractere. Par exernple, dans Ie code
ASC II , la constante caractere '0' a pour valeur 48 , et la constantecaractere 'A ' a pour valeur 65.
Lavaleur d'une constante caractere contenant plus d'un caractere de -
pend de l'implernentation. Dans un souci de portabilrte, les
constantes caracteres a plus d 'u n c ar ac te re devraient etre evitees,
Les sequences d'echappement cornrne '\n peuvent €tre employees
dans l es c on sta nte s c ar ac te re s, L es c ara cte re s ' et \ sont representes
de cette facon,
Pour donner 1 1 une constante caractere Ietype wchar _ton uti lisera le
prefixe L . Par ex em ple :
L'A' L'\X123'
Une c h ain e d e c a ra c te re s est constiruee d'une suite de caracteres et de
sequences d'echappement places entre des guillemets doubles. Par
exernple:
" l e s u i s u ne c ha i n e d e c ar ac t , r e s! \ n"
Une chaine de caracteres est ran gee en rnemoire sous la forme d'un
tableau de char (voir T yp e d eriv es, infra), puis du terminateur de
chaine' \0' .Elle O il donc un octet de plus que la suite de ses caracteres,
Expressions et operateurs 17
La figure 3 illustre le rangement en mernoire de la chaine de carac-
teres" He llo! " sou s la forme d'un tableau de char.
R an g ee c omme ta bl ea u de c ha rI 'H'] ' e ' = , 'I', I ' . " I'0' I ' ~ 1 ' \ 0 ' 1P M "Figure 3. Une c h ar ne d e c a ra c te re s r an gie d an s u n t ab le a u
Le s chaines de car ac te re s s ep a re es s eu lemen t par des car ac te re s d 'e s-
pacernent seront concatenees en un e s eu le chaine.
Par exernple:
"he110" "world" es t equivalen t a "hello world!"
Le caracterejin d e /i gn e etant aussi un caractere d'espacernent, cette
concatenation fournit un moyen simple de poursuivre une longue
chaine de caracteres sur un e autre ligne du code source.
En ajoutant Ie prefixe L , les tongues c h ain e s d e c a ra c te re s peuvent €tIe
de fin ie s comrne des tableaux dont les elements sont du type wchar_ t.
L " Je suis une c ha i n e d e c ar ac t e re s !"
Exp re ssio n s e t o p e ra te urs
Une expression est une combinaison d'operateurs et d'operandes,
Dans Iecas le plus simple, une expression peut etre constituee simple-
rnent d'une constante, d'une variable ou de I'appel a une fonction.Les expressions p eu ve nt a us si faire fonction d'operande et €tre asso-ciees entre elles par des operateur pour creer des expressions plus
complexes.
Chaque expression a un type et, si ce type n'est pas void, une valeur.
Voici quelques exemp les d 'expressions:
4 • 512
p r i n t f ( " U n e x e m p l e ! \ n " )
1. 0 + s i n ( x )
s r a n d ( u n s i g n e d ) t i m e ( N U L L ) )( i n t * ) m a l l o c ( c o u n t * s i z e o f ( i n t )
II T y p e
/IT y p e
II T y p e
II T y p e1/ T y p e
int
i n t
d o u b l e
v o i dint *
Dans les expressions comprenant plus d'un operateur, les regles de
priorite des operateurs determinent l'ordre d'evaluation . Parexemple, les operateurs arithrnetiques *, I et % ont priorite sur les
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 13/68
18 Exp r es si o ns e t o p e ra ie u rs
operateurs + et -. En d'aurres terrnes, d an s l es e x pr es si on s arithrne-
tiques, on applique les regles usuelle pour l'ordre des operation s.Par e xe rn ple :
4 + 6 * 512 II e st e q u i v a l e n t ~ 4 + (6 * 512)
S i l 'o n d es ir e un autre ordre d 'e va lu at io n , o n u ti li se ra l es p ar en th es es :
(4 + 6) * 512
Vous trouverez au tab leau 8 1es regles de p ri or it e d es op er at eu rs ,
Tableau 8. Les regle: d e p rio riti d es operateurs
Priorite Operateur o r d r e d'evaluation
0 [ ] -) g a u c h e Ii d r o i t e
2 ! -++ -- + - d r o i t e a g a u c h e
( t y p e ) * & s i z e o f3 * 1 % g a u c h e 1 1d r o it e
4 + - & g a uc h e 1 1d r o i te
5 c c » g a u c h e a d r o i t e
6 ( (= ) >= g a u ch e 1 1d r oi t e
7 == 1= g a u c h e Ii d r o i t e
8 & g a u ch e 1 1d r oi t e
9 A g a u c h e it d r o i t e
10 g a u c h e a d r o i t e
1 1 & & g a u c h e a d r o i r e
1 2 II g a u c h e a d r o i t e
1 3 ? : d r o i t e a g a u c h e
1 4 = += - = * = 1= % = d r oi te 1 1g a u ch e
& " A = 1 = « = » =
1 5 g a u c h e a d r o i t e
Si deux operateurs on t la rn ern e p rio rite , c 'e st l'ordre d'evaluation
indique d an s l a c olo nn e «ordre d'evaluation» du tab leau 8 qui pre-vaut. Pa r exernple:
2 * 5 I 3 /1 e s t e q u i v a l e n t . (2 * 5 ) I 3
L es o pe ra re urs p eu ve nt e tr e unaires ou binaires. U n o pe ra te ur u nairea un seul operande tand is qu'un operateur b inaire en a deux . Cetted istin ctio n est im po rtan te p ou r d eu x ra iso ns:
Operateurs arithmitiques 19
• Tous les operateurs u na ire s o nt la rn em e priorite ;
• Les quatre c ar ac te re s - , + , * et & representent un operateur
unaire o u b in ai re selon Ie n om bre de leurs operandes.
C possede en outre l'operateur conditionnel ?: qui est un operateur
t emaire .
Chaqu e op er at eu r es t b ri ev em e nt d ec ri t d an s l es t ab le au x 9 it 16 de ss ec ti on s q u i suivent, L'ordre d'evaluation de s operandes n 'e st p a s d e -fini, sauf s'il e st e x pl ic it em e nt i nd iq ue , P ar ex ern ple, on n e peut pasp re dire q ue ] sera I 'o rd re d 'a pp el d es fo nctio ns d an s l'e xp re ssio n su i-
vante:
flO + f20 lIOn n e sait pas quelle foncti o n
II e s t a p p e l e e 1 a p re mi , r e .
Operateurs arithmetiques
Tableau 9. Les opera i eurs a r it hme ti ques
Op. Signification E x e m p l e Resultat
* M u I ti p li c a t io n x * y L e p ro d u i t d e x p a r y .
/ D i v i s i o n x 1 y L e q u o t ie n t de x p a r y .
% R e s t e d e l a d iv i s i o n x % y L e r e s te d e l a d iv is io n x
I y
+ A d d i t i o n x + y L a s o r n m e d e x e t y .
S o u s t r a c t i o n x - y L a d i f fe r e nc e e n tr e x e ty .
+ S i g n e p lu s +x L a v a le ur d e x .
S i gn e r n o in s -x L a n e g a t io n
a r i th m e t i q li e d e x ,
++ lncrernentation + +x x ++ X e s t i n c r e rn e n te
(X=X+1). L'operateur
pn!fixe(++x)incr ernente l 'operande
a v a n t q u ' i l n e s o it
e v a l ue , l 'o p e r a te u r
po st fi xe ( x + + )
incr emeute l 'operande
a p r e s e v a lu a t io n .
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 14/68
20 Expressions et operateurs
Tableau 9 . l es o p e ra teu rs ar it hme t iques ( su it e )
Op.
--x x --
Signification Exemple Resultat
D e c r e m e n t a t i o n x est decrernen t e( x= x -l) . L 'o p e ra re u r
p r e fix e ( - - x)d e c re r ne n t e l'o p e r a n d e
avant qu'il n e soit
eva Iu e , Iopera leurp o s t f i x e (x - -)
decrernente l 'operande
ap re s e v a Iuation.
Les oper ande s des oper at eu r s a ri th r ne ti qu e s peuvent etre de n 'im-
porte quel type, a I'exception de ceux de l'operateur % qui doivent
Hre de t yp e e n ti er ,
Les convers ions ar ithmet ique s usue l le s s on t e ff ec tu ee s s ur le s o pe ra nd es ,
Pa r exernple, 3.0 / 2 est eq uivalent it 3.0 / 2. O . Apres une telle
conversion, Ie resu Itat sera d u type des operandes,
Notez bien que le resultat de la division de deux operandes de type
entier est aussi un entier 1 -
6 I 4 II Resultat 1
6 % 4 II Resultat 2
6.0 I 4. 0 II RBsultat 1.5
Vope ra teur d ' inc r emen ta t ion ++ (et, de la r n er ne r nan ie re I 'ope ra t eur de
d ec rem en ta tio n - -) peutetre p la c e soit avan t soit apri!s son operands.Bien qu'une variable so it incrernenree (sa valeur est augmentee de
1) i lia fois pa r +f-X ( no ta ti on pr if ix e e ) et p a r x+ + ( no ta ti on pos t ji xe e ) , ce s
deux expressions ne retournent pas la merne valeur. L'expression t+x
a pour valeur de retour la valeur de x augmentee de 1 landis que
l'expression x++ retourne la valeur, inchangee, de x ,
Lesoperateurs t+ et - - effectuant une affectation, leur operande doit
etre une Ivalue, c'est-a-dire une expression qui designe une place en
mernoire, comme c'est Iecas pour les variables.
On peut aussi employer les operateurs + + , --, + (addition) et - (sous-
traction) avec les pointeurs, Pour plus d'informations sur les poin-
teurs et leur arithrnetique, voyez la section Types dirlves, infra ..
Operateur« d'ajfectation 21
Operaieurs d 'affectation
tes affectations sont effectues par les operateurs d'affectation simple
ou les operateurs d 'af fec tat lon composee , com me Ie montre Ie tableau
10.
T ab le a u 1 0. L e s o p e ra te ur s d'af feaat ion
Signification Exemple Resultatp.
Affectation simple A f f e c t e l a v a l e u r d e y
< jI x
x o p = y e s t
equivalent 1 1 x = x
op (y) ( ou o pe s t
1I n op era te u r
a r i th m e t i q ue b in a i re
au u n o p e r a t e u r
l o g i q u e b i t I I b it
b i n a i r e )
x = y
Affectation composee x + " y
L'operande gauche d'une affectation doit erre une lvalue, c'est-a-dire
u ne ex pre ss io n d es ig na nt un objet. Une nouvelle valeur est affecteea cet objet.
Le s noms de variables son t les exernples le s plus simples de 1values.Dans Ie cas d'une variable ptr de type pointeur, ptr et *ptr sent
tous deux des Iva lues. En revanche, les constantes et les expressions
comme x+ 1 ne son t pas des Ivalues,
Lesoperandes suivants sont autorises dans une affectation s im p le ( " ") :.
• Deux operandes de t ype ar i ihme t ioue j
• Deux operandes avec Ie rnerne type IIllion ou structure;
• Deux pointeurs vers des objets du mhne type , IImoi ns que l 'ope-
raride droite soit la constante NULL .
Si un operande est un pointeur vers un objet, alors l'autre operande
peur @treun pointeur vers Ie type incomple tvoid (c'esr-a-dire void ,.)
Si les deux operandes ont des types differents, Ja valeur de I'operande
droit est convertie dans Ie type de celui de gauche.
Une expression d'affectation a le type et la valeur de l'operande gauche
apres affectation. L'ordre des affectations est de droite a gauche.
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 15/68
22 Expressumset operateurs
a = b = 1 0 0 ; II e s t equivalent ~ a = ( b = 1 0 0 ) ;
II L a valeur 1 0 0 e s t a f f e c t e e ~ b et a .
Un e a ff ec ta tio n c ompo se e est de la fo rm e: x op = y, Ot1 op est un opera-
teur arithrnetique binaire ou un operateur lo giq ue b it a bit binaire.La valeur de x op (y ) es t affectee a x. Pa r exemple :
a *. b + l ; II est equivalent ~ a • a * ( b • 1 ) ;
D an s lin e affectation com posee x op= y ,. l'e xp re ss io n x n'est evaluee
qu'une seule fois.
C'est la s eu le d if fe re n ce e nt re x op = y et x = x op ( y )
Op era te urs re la tio nn els e t o pe ra te urs
logiques
Toute comparaison est un e ex pressio n de ty pe int qui retourne la va-
leur 1 po ur « vrai » ou 0 pour «faux », L es c om pa ra is on s s en t e ff ec -
tuees grace au x operateurs relationnels du tableau 11.
Tableau 11 . Les opr fro teu rs r e io t ionne ls
Op. Signification Exernple Resultat : 1 (vrai) ouo (faux)
in fer ieura x < y 1 si x est strictement
inferieur a y
inferieur ou egai it x < ~ Y isi x est inferieur ou
egal a ysuperieur it x > Y 1 si x e st strictemenr
superieur it y
superieur ouegal a x > = y 1 si x est superieur ou
egai 1 1 y
egal a x -- y lsi x est egal a yd ifrefen t de x!~ y 1 s lx est d if fe ren t de y ..
Dans t ous l es autr es c as ,
l 'expression retourne O.
<
> =
!=
Les operandes suivants sont autorises en tant qu'operateurs relation-
nels:
• deux operandes de type arithrnetique, Lesconversions arith-
metiques usuelles peuvent ~tre effectuees sur Jes operan des ;
Ope ra te ur s lo g iq u es 23
• deux pointeurs vers des objets de meme type.
On p en t c or np ar er des nombres complexes it l'aide des operateurs
~ . et !=. E n o utre , le s o pe ra nd es p eu ve nte tre des p oi nt eu rs v er s des
fo nc tio ns d e meme type. Un pointeur peut aus si e tre compare it NUll
ou it un pointeur vers vo id. P ar exemple:
int c m p , * p l , * p 2 ;
c m p - p1 < p2; II si pi est infar t e u r , p2,
/1 a l o I s c m p • 1 ; s i n o n c m p ~ O .
Op e ra te urs lo giq ue s
Les o p er at eu r s l o gi qu es d u tableau 12 peuvent e tr e u ti li ses pour com-
biner l e s r e su l ta t s de plu sieu rs co mparaiso ns en un e expression 10-g ique,
Tabiea» 1 2. u s o p er ate ur s lo giq ue s
Op. Significa tion Exemple Resu ltat : 1 (vrai)
ou 0 (faux)
& & E T logique x & & y 1 s i x e t y non t o us l e s 2
nuls
II a u logique x II y 1 si x ou y(ou les 2 ) n on
nul's
N O N lo g iq u e !x 1 si x=o. Dan s tous les
autres cas, l 'expressionre tou rne O.
Les operateurs logiques peuvent avoir des operandes de n'irnporte
quel type scalaire (c'est-a-dire a rith rn etiq ue o u pointeur), Toute va-
l eu [ di fferente de 0 e st c on sid ere e c ornm e «vra ie»; 0 es t «faux»
(voir aussi p. 9, les definitions de true et false en ANSI C99).
Com me les expressions relationnel les, les expressions logiques retour-
nenr les valeu rs« vrai » ou« faux", c'est-a-d ire les valeurs int 0 ou
l'
! x I I Y II " ( n o n x ) au y. retourne 1 (vrai)
II si x -- 0 ou Y 1= 0
~es operateurs & & et II evaluent d'abord l'operande gauche. Sicette
evaluation suffit it connaltre Ie resultat d e l'o pe ra tio n (p ar e xemp le ,
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 16/68
2 4 Expre ssi ons e t ope ra teu rs
si l'operan de gauche de &&vaut 0 ou l'operande gauche de I I n'estpas n ul), alors l'operan de gauche n 'est pas evalue, Par ex ern ple:
i (max && scanf("%d", &x) == 1
Dans cette ex pressio n lo giq ue , J a fonction sc an f n 'e st appelee que si
iest i n fe ri eu r a max.
Operateurs bit a bit
Le langage C cornpor te six operateurs bi t a b it, qui son t decrits dansIe tableau 13 . I I r equ ie ren t to us de s oper andes en ti er s,
Tableau 1 3. L e s o p e ra te ur s b it il bit
Op. Signifieatio n Exemple
E T bi t a bi t x & yo u bi t Ii bit x I y
a u e x c l u s i f bi t it bit x " y
N O N bi t Ii bi t -x
d e c a l a g e it g a u c h e x « y
d e c al ag e 1 1d ro it e x » y
&
I
"
«
Resultat
(pour chaque bit)
1,si 1 a la foisdans x et y1, s i 1d an s x o u y ,o u
le s deux
1, si 1 dans x ou y, r n a i s
p a s l e s deux
1, si ° dans x
Chaque b i tdans x es t
d e c a l e de y positions v e l ' S
lagauche
C ha qu e b it d an s x e st
d e c a l e de y positions v e r s
la droite
Le s o p er ate ur : io giq ue s b it il bit & (ET) , I (OU), " (OU exclusif) et -
(NON), interpretent leurs operandes bit par bit: un bit positionne
a 1 es t considere comme «vrai », un bi t positionne I I 0 s er a « faux »,
Ainsi, dans Ie resultat de z = x & y , un bit est positiorme a 1i etseulement si Ie bit correspondant est positionne a 1 a la fois dan sx et y. L es conversions a ri th rne ti qu e s u su e ll es sont effecrues sur les
operandes.
Les operateurs de decalage «et » deplacent la sequence de bits de
l'operande gauche d'un nornbre de posi ti ons indique par l 'op~rande
droite. Les deux operandes su bisse nt a u prealable une prom otion en -
tiere (voir La p r omo ti on e n ti er e, p . 2 9) .
Ope ra te u rs d 'a c c es 1 1 f a m emo ir e 25
i n t x ~ oxF, T s s u l t a t ;
T e s u l t a t ~ x <{ 4 ; II r e t o u r n e O x F O
r e s u l t a t ~ x » 2 ; II r et o u rn e O x 3
Les positions la issees vacan tes a droite par l e d e ca lag e a gauche «
sont toujours rem p lie s a ve c de s 0, ce qu i depasse a gauche disparalt,
L e s positions l a i s s e e s v a c a n t e s I I gauche par Ie decal age I I droite »sont remplies avec des 0 si l'operande est positif ou nul, ou bien
de type non signe, Seion l'implernentation, si l'operande gauche est
signe et n eg atif le s positions de gauche p eu ve nt e tre remp lie s a ve c
de s ° ( dim /a g e /o giq ue ) ou avec la valeur du bit de signe (dim/agea t it hme ti qu e ) .
Op e ra te urs d 'a c ce s a L a memoire
L es o pe ra te urs d u tableau 1 4 so nt u tilis es p ou r seceder aux objets enrn em oire. L es te rm es emp lo yes ie i (p oin teu r, ta blea u, stru ctu re , etc .)
seront expliques plus loin dan s la section Type s d e r iv e s .
Tableau 14. L e s o p e ra te u rs d 'a c c es a la m em o ire
Signification ExempJe Resultat:
l(vl'ai) ou 0 (faux)
A d r e s s e de &x Un pointeur constant
v e r s x
Id ir e c n o n *p Lava leur ( ou l a
f o nction) p o i n t e e pa r pElement d 'un xli] * (X + i), l 'e lemenr d 'i n -tableau d e x idan s I e t ab le au x
Membre d ' u n e S . x Le m e m b r e de nom xs tr u c t u r e ou d ' u n e d an s l a s t r u c t u re o u d an sunion I'union s
Membre d 'une p-xx L e m e m b r e d e nom xs tr uc tu re ou d 'une dans la s tr uc tu re ou dansunion I'union p o i n t e e pa r p
Op.
s
*
[]
-)
L'operande de I 'operateu l ' d 'adresse & doit etre lin e ex pression qui de -signe u ne fo nc tio n ou un objet. L'operateur d'adresse & retourne
l'adresse memoire de son operande, U ne expression de la forme &x
est un pointeur vel'S x. L'operande de & ne do it pas etre un champ
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 17/68
26 Expre ssi ons e t ope ra teu rs
d e b its, n i tin e v aria ble d ec la re e a ve c le s pe cific ateu r d e c la sse d e s to -
ckage registe r.
I .:operateur d'indirection * p er rn et d 'a cc ed er a un objet ou line fonc-tion au m oyen d 'un pointeur. Si ptr est un pointeur vers un objet
o u un e fon ction , alors *ptr design e la valeur ou Lafon ction poin tee
par ptr. Par exemple:
i n t a , * p a ; II v a r i a b l e d e t y p e i n t e t
II u n p o i n t e u r v e t s u n t yp e i nt o
pa ,,&a; I I pa p o i n t e vers , I -*pa ~ 1 2 3 ; II M a i n t e n a n t a : 1 2 3 ;
L 'o p er ate ur d 'in de xa tio ll [ ] perrn et d'acceder aux elem en ts d'un ta-
b leau. S i vest un tab leau et i un entier, alo rs v[i] design e I'ele-
ment d'indice idans ce tab leau . Plus gen eralem en t, I'un des deux
operandes de l'operateur [] doit etre un pointeur vets un o bjet (le
n om d'un tab leau, par exernple) t an d is q ue l 'autre doit e tr e u n entier,
Une ex pression de la form e xj i]estequ iv alen tei:t (*(x + (i))), P ar
exemple:
f l o a t a[lO], * p a ; II U n t a b l e a u e t u n p o i n t e u r .
pa _ a; / I pa p oi n t e s u r a [ o J .
En effet, puisque pa pointe sur aj o ], p a[3 J e st e qu iv alen t a a[3J ou
*(a+3) .
Les operateurs . et -> de ignent un membre de s tructu re ou d'union,
I'operande gauche de l'operateur point doit @tr e du ty pe union ou
structure, Celui de l'operateur fleche es t toujours un p oin teu r v ers
une s tru ctu re o u une un io n. D an s les deux cas, l'operande d ro it d e-
sign era lin m em bre du type un ion ou structure. L e r esultat a Ie type
et la valeu r du m ern bre co nsidere,
Si p est un poin teur vers une structure ou une un ion et x Ie nomde l'un de s mernbres, alors p-) x equ ivaut a (*p). x , et retcurne Ie
rn ern bre x de la structure ou de I'un ion sur laquelle po in te p.
Les operateurs . et -> , tout comrne [], on t la plus haute priorite.
A in si l'e xp res sio n + + p -> x e st e qu iv ale nte a + + ( p-> x).
Autres opera teursLes o p er ate ur s d u t ab le au 1 5 n 'a pp ar ti en n en t a a ucune d es c at eg o ri esr enc on t re es j us qu 'a p re se n t.
Au tr es o p e ra te u rs 2 7
Tableau 15. L e s au tr es o p e ra te u rs
Op. Signification Exernple Resultat :
1(vrai)
ou 0 ( fa ux )
()A ppel de fo nctio n po w(x ,y) Executela fonctionaveclesarguments x
et y
(type) Conversion (long) x La v al eu r d e x ave c Ie
type sped fi esizeof L a t a i l ie en oc te t s sizeof(x ) Lenombre d'oetets
occupes en rnemoire
parx
? : Evaluation x?y:z S i x est diff"frentd econditionnelle 0, alors y , s inon z
Operateur x ,y Evalued'abord x ,sequentiel pu isy
Un a p p el d e f o n ct io n es t constitue d'un pointeur vers u ne fo ne tio n
(le nom d'une fo ne tio n p ar exernple) s ui vi p ar une l iste d 'arguments
en tre paren theses () ) et qui p eu t etre vide.
L 'o pe ra te ur d e cOlluersion (c a t) n e peut etre utilise qu'avec des o pe-
randes de type sea/aire! L'expression (type) x retourn e la v aleu r d e
l'o pe ra nd e x c on ve rtie d an s le ty pe sp ec ific e ntre p are nth ese s.
L'operande de l'operateur sizeof est soit un nom de type entre pa-
re nth es es , so it u ne e xp re ss io n q ui n 'e st p as d e ty pe fo nc tio n, L 'o pe ra-
teur sizeo f reto urn e le n om bre d'o ctets n ecessaires au sto ck age d'un
o bje t d u ty pe sp ec ifie o u d u ty pe d e l'ex pre ss io n e ntre p are nth ese s. C e
resultat est un e co nstan te de type siz e_ t, C 'est-a-dire.Ia p lu part d u
tem ps, un en tier n on sign e defin l dan s Ie fich ier d'en -rere stddefh.
< ?n p eu t e crire u ne e xp re ss io n c on ditio nn elle g nk e a I 'o p e ra te u f c o ndi -t ionne! ? :. D an s l'ex pression x ?y: z , l'operan de gauche x est eva l ue
en prem ier. S i Ie resultat est differen t de ° (c 'es t-a -d ire x « vra i» ), I e
deuxierne o peran de y est evalu e, et l'ex pressio n reto urn e Ia valeur d ey. Si x est egal a 0 (« faux »), le tro isiern e operan de zest evalue et
l'e xp re ssio n re to urn e la v ale ur d e Z.
L e prem ier o peran de peut etre de n 'irn po rte q uel type scalaire. S i les
deux autres operan des n e son t pas du m ern e type, ils sub issen t un e
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 18/68
28 Co n v er sio n s d e t yp e
con version de typ e. L eur type comrnun sera alors Ie type du resul-
ta t. L es ty pe s su iv an ts so nt au to rises p ou r les d eu xie rn e e t tro isie me
operandes:
• Deux o peran des d e type arithm etiqu e ;
• Deux op eran des d u m ern e ty pe stru ctu re au u nio n, ou b ien Ie
t yp e v o id ;
• D eu x p oin teu rs vers d es o bj ets d u meme t ype , a morns qu e I'und 'e ux p o in te vers la constance N UL l. S i l'un de s operandes es t
un poin teur vers un ob jet, l'autre peut poin ter vers vo id.
L'operateur siq uen t ie l ou virgule a d eu x op era nd es : c elu i d e g au ch e e stevalue d'ab ord, puis celui d e dro ite , L e resultat a Ie type et la valeur
de l 'operande d ro it. D an s Ie ca dre d 'u ne liste d 'in itialisa tio ns , d e de -c la ra ti on s , o u d 'a rg u rn e nt s, l a v ir gu le n'est pas un operateur m ais un
s im ple sig ne d e ponctuation l
A utre n ota tio n de s opera t eurs
D es co nstan tes sy mb oliq ues sy no nyme s d e c erta in s o pe rateu rs se ntd ef in ie s d an s I e f i cb ie r d ' en -t et e iso646.h (v oir t ab le au 1 6 ).
Tableau 16. Co n st an te s s ymb oli qu e s p o ur le s o p e ra te u r«
Const. Sens Canst. Sens Const. Sens
an d && bitand & an d_ e q B r-
or II bitor I or_eq 1 =not ! xo r
,xoreq " ' < ; : : .
compi - not e .q !=
Con v ersio n s de t ype
U ne c on ve rs io n d e ty pe retourne l a v a leu r d'une e xp re ss io n d an s u na utre ty pe. C ette c on ve rs io n n e p eu t etre e ffe ctu ee q ue su r d es ty pe s
s ca la ir es ( ty p es ar it hr ne ti qu es e t p oi nt eu rs ),
D ans la m esure ou elle peut etre represen tee dans le nouveau type,u ne c on ve rsio n co ns erv e to ujo urs la v aleu r d 'o rig in e, P ar e xern ple ,le s n oru bre s e n v irg ule flo tta nte so nt arro nd is d an s u ne c on versio n
d e d ou ble e n flo at.
Promo ti on e n ti e re 29
L a co nv ersio n d e ty pe e st irn plic ite - si e lle es t e ffe ctu ee au to rn ati-quement par le c om pilateu r - ou expl ic it e, e n u ti li sa n t l'operateur
de conve rs io n , IIe st d ' us ag e p ou r un bon program meur de toujours
u tilis er l'o pe ra te ur d e c on ve rsio n lo rs qu 'u ne c on ve rsio n d e ty pe e stn ec essa ire , C ela e vite le s a le rte s d u c om p ila te ur e o rendant to utes le s
c onve r si o n s ex plicites,
P rom o tio n e n iie reLors qu e l es o pe ra nd es de type in t au unsigned int sont autorises
dans un e e xp re ss io n , i ls peuvenr hre rem places par des operandes
de type _B ool, char, unsign ed char et short, ou des cham ps de b its.D an s ce cas, les operan des sub issen t u ne p rom otio n e n tie re : i ls s oo t
autom atiquem en t con vertis en in t ou un sign ed int; ce tt e d e rn i er econversion n'ayant lie u q ue si ro ute s le s v ale urs du type d'origin e n e
p eu ve nt e tr e representees d an s Ie ty pe in to
Le langage C «attend" toujours des valeurs qui son t au moins dut yp e in to Si c est un e variab le de type char, sa valeur dan s l'expres-
sion:
c + '0 '
es t « promue» en in t avan t que I 'addition ne soit effectuee.
C o n v e rsio n s a rithme tiq ue s u su elle sS i le s o pe ra nd es d 'u n o pe ra te ur binaire sont d 'u n ty pe arithrnerique
d if fe re nt , l es c o n v e rs io n s a r it hme ti qu e s u su e ll e s so nt im plicite me nt ef
fectuees afin q ue le urs valeurs alent un typecommun, Toutefois, lesc on ve rs io ns a rir hr ne tiq ue s u su eile s n e s on t e ffe ct ue es n i p ou r le s o pe -
rateu IS d 'assignation, ni pour les operateu IS logiques & & et II .
S i d es o peran des o nt to ujo urs d es ty pes d iffe ren ts a pres p ro mo tio nentiere, ils sont converris dans Ie type range au p lus haut de Ia hie'
ra rc hie d e la fig ure 4 .
Lorsqu'a lieu un e c on v er si on e n tr e t yp es f lo tt an ts c omp le x es , l eg t y pe sdes parties reelles et i magin aires son t tous deux con vert is selon lesr eg le s a pp li ca b l es a ux t yp es f lo tt an ts r ee ls c or re sp on d a n ts .
C o n ve rsio ns de typ e de s a ssign atio ns e t de spo in t eursP lu si eu rs ty pe s a ri tb m eti qu es p eu ve nt e tr e c on ce rn es p ar u ne s im pl ea ssig natio n. D an s c e c as , la v aleu r d e l'o pe ran de d ro lte e st to ujo urscc nv ertie d an s le ty pe d e l'o pe ran de g au ch e.
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 19/68
30 Con v e rs io n s d e . ty p e
l on g d ou bl e
1d o u b l e
1f l o a t
1u n s i g n e d l o n g l o n g
1l o n g l on g
1u n s i g n ed l on g
1l o n g
1u n s i g n e d i n t
1i n t
N e s :a p p liq u e p a s s i i n te s t e q U Iv a le n t a l o n g
Figure 4. H ie ra rc h ie d e f a p romoti on d on s l es ty p es a rithm etiq !! es
1ns tru c t i0 1 1 5 31
Dans une assignation cornposee, Ies conversions arithmetiques
usuelles sont effectuees pour l'operation, pu is routes les aut re s conver -
sions de type ont lieu comme pour une assignation simple.
Un pointeur vers v o i d peut e tr e co nve rt i en n'importe quel autre
pointeur vers un ob jet . Rec ip roquemenr, un pointeur vers u n o bje t
peut Hre c on ve rti e n un p oin te ur v ers v o i d . L'adresse qu'il indique ~sa valeur - teste inchangee,
Instructions
Une instruction precise u ne a ctio n a effectuer; p ar e xe rn ple , u ne OP{c
ration arithrnetique ou un appeJ de function . De nom breuses ins-
tructions permettent, au m oyen de boucles et de b ranchem en ts, decon troler Ie deroulem en t d'un programme. Le s instructions sont trai-
te es s eq ue ntie lleme nt, l es u ne s a pre s le s a utr es , s au f s i l'u ne d 'e ntre
elles declenche un saut,
Toure instruction q ui n 'est pa s UI1 bloc d oit s e terminer p ar u n p oin t-virgule.
B l oc s e t e xp re ssio n sUn blo c , au instruction cornposee, regroupe lin ensemble d'instruc-
Hansen une seule, UI1 bloc pent aussi contenir des declarations ..
La syntaxe d 'un bloc est la s uiv an te :
{[liste de declarations J [1iste1 1 '
instructions]}Voici un exem ple de bloc:
{ i n t i = 0; 1/ D e c l a r a t i o n s
s t a ti c l o n g a :
e x t e r n l o n g m a x ;
Hd; / / I n s t r u c t i o n s
if (a >~ max )
{ } / / l J n b l o c imbrique
Dans un bloc, les declarations precedent norrnalement les instruc-
tions. Toutefois,en ANSI C99, on est libre de placer les declarations
oo I'on veut, -
De nouveaux blocs peuvent apparaitre n'importe ou 11l'interieur
d u b lo c p rin cip al d'une foncrion, On cree habitueUement un bloc
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 20/68
32 Instruaions
lo rs qu e la s yn ta xe fa it a pp el a u ne i r ru ctio n r na is q ue Ie p ro gramm e
e n re qu ie rt p lu sie urs; p ar e xe rn ple, u ne su ite d 'In stru ctio ns d ev an ti!:trerepetees dans une boucle. .
U ne instl ' l Ictiol1-expression e s t u n e exp re ss io n suivie d 'un po in t-v irgu le .S a s yn ta xe e st la s uiv an te :
[expression 1 ;
Vo id un ex e rnp le d 'i n st ru c ti on - ex p re ss io n :
y ~ x ; II Affectation
U ne e xp re ssio n. - un e affectation o u un appel d e fo nc ti on , pa r
e xe rn ple - es t evaluee p ou r se s effets d e b ard s. So n t yp e e t sa.valeurso n t n egl ig e s.
Une in st ru c ti on constituee d 'u n p oin t-v irg ule se ul est appelee ins-
t ru c ti o n v i de , elle n 'e ff e ctu e aucune operation, Pa r ex ern ple :
for ( i~; str r i] !~ '\0' ; Hi )
II Instruction vide
In stru ctio n s d e sa ut
L es in stru ctio ns su iv an res p erm etten t d ec on tro le r J e d ero ulem en td 'u n p ro gr amme :
• les i ns tr uc ti on s d e b ra n ch em e nt : if...ls e, s wi tc h;
• le s b ou cle s: w hile , d o ....w hile , fo r;
• le s in stru ctio ns d e saut : g oto , c on tin ue , b re ak , r et urn .
if ...else
l.'in stru ctio n if g en ere u n sau t c ondi ti onne l.
Syntaxe ; if (expression) instructforn [else instruction2j
expression d oitetre d e ty pe sc ala ire . C mstru ctio n d e c on tro le if estevaluee e n p rem ie r. S i l e r es ul ta t e st d iff ere nt d e 0 , c 'e st -a -d ir e s i l 'e x -
pression retourne «vrai ». alors Instruct ioru est executee, Sinon,quand else es t p resen t , ins tr uc t io nz es t executee..
Exemple :
If ( x > y ) m a x . x ; II Affecte I e plus g r a n d d e x o u y
else m a x • y; I I ~ Ia variable m a x .
i ns tr uc ti on s d e s au : 33
L 'empl oi d e else es t fac ultatif S i la v ale ur d e l'expression de con tr el e
es t 0, c'est-a-dire «faux », et que el se e s t a b sen t, l 'execution se pour-
su i t 11l 'i n st ruc tion su ivan te .
Lors qu e p lu si eu rs instructions if so nt lm briq uees, u ne clause else
est toujo urs reliee au dern ier if (d u n iv ea u d 'im brica tio n co rte s-
pen dan t) qui n e possede p as de else. L 'u tilisation de b locs perrn etd 'a ff ec te r e ls e a u n a utr e if.
Exemple :
H(n>o)
{ i f ( n % 2 ~~ 0 )
puts("n est positif et pair");
}
else II rel ie au premier if
p u t s ( " n est n e g at i f a u n u l ") ;
switch
Dans une i ns tr uc ti on sw itch, l a v a leu r de l'expression d e c on tr6 1 e e st
c om pa ree a ux co ns tan tes a sso cie es au xe tiq uettes c ase . 5 i le re su lta t
de l'evaluation de l'expression correspond I I l 'une de ces cons tantes,
l 'execution du programme se poursuit it p artir d e l'etiquette cortes-
pondante, Si aucune constante ne correspond, le programme e x e -c ute l'i ns tr uc tio n s uiv an t I'e ti qu et te d ef au lt. S i c ell e-c ie st a bs en te ,
l 'e x ec ut io n s e p ou rs ui t a l'in str uc tio n s uiv an t la f in d e l'in str uc tio nsw i tch.
Syniaxe: switch (expression) instmction
ex pression est un e ex pression de type en tier et in struction un b loccom portan t des etiquettes case et au plus une etiquette default.C ha qu e etiq ue tte c as e est d e la fo rm e c as e con s t ; ouconst e st u nee x pr es si on c on st an te d e t yp e e n ti er , T o ut es l es e x pr es si on s c on st an te s
e va l ue es a ss oc ie es a ux c a s e d oi ve nt et re d if fe re nt es .
Exemple :
switch ( commande{
II Une comaande ut fl isateur ,
II un c h o l x dan, un menu,
II par exemple.
case ~ :case 'A ' : act i oru t ) :
bIe~k;
II Effectue action 1,
II p u i s quitte I e switch.
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 21/68
34 Instructions
case 'b':
case 'B': scttonz (); II Effectue action 2,
break; II puis quitte Ie switch . .
default: putcharj ' \ a'); IJ Pour toute autre "coemande' ' :
II alerte.
A p re s e xe cu ti on d es e xp re ss io n s associees It u ne e ti qu e tt e, l 'e x ecu ti ond u p ro gr amme se pou rsu it en seq uence, queJ le s qu e s ci en t l es a ut re s
etiquettes. O n peut utiliser l'in struction b reak pour sortir du bloc
switch It n 'irn po rte q uel m om en t. U n b rea k est in disp en sab le si 1 '0 nfi e veut p as e xa min er les autres case.
L a p ro mo tio n en tiere est ap pliq uee It l'ex pressio n d e co ntr6 1e d u
swit ch . L es c on sta nte s a ss oc ie es aUK d if fe re nts c as e s on t c on ve rtie sd an s I e t y pe r es ul ta nt .
BouclesU ne boude est constituee d'une instruction ou d'un b loc, le corpsd e la b ou cle qu i est ex ec ute p lusie urs fo is,e n fo nctio n d'un e certain e
condition. L e la n gage C fou m it t ro is i ns tr uc ti on s d'iteration: while,d o ... w hile , et fo r.
Dans chacune de ce s i ns tr uc ti on s, I e n o rn b re d 'i te ra ti on s e ff ec tu ee s
est determ in e par un e e x pr e ss io n d e c o nm tl e. C ette ex pre ssio n e st d etype scalaire ( un e expr es si on arithrnetique ou un poin teur). Elle est« fausse » si sa valeur va u t 0; «vraie» sinon.
D 'u n p oin t d e v ue sy ntax iq ue , Ie c orp s d e la b ou cle n e co nsiste q u'enun e seule i ns tr uc ti on . P lu si eu rs i ns tr uc ti on s p eu ve nt € :t Ter eg ro u p ee sdans un bloc, s i necessaire,
while
L 'in struction while perm et de con struire un e b oucle «pilotee par Iehaut » : la condition de rebouclage, c'est-a-dire I'ex pressi on decontrole, es t evaluee en prem ier. 5i elle retourne «vrai », I e c or ps
de la b ouc le e st ex ec ute, p uis l'expression de controle es t evaluee anouveau. 5i elle retourne «faux », l'execution continue a l'instruc-
tion qui suit le corps de !a boucle.
Syntaxe: while ( expression )
instruction;
BOlides 35
Exemple :
s = c h n ; II Le pointeur vers Ie type charwhile( *s ! = '\0') II pointe sur Ia fill d e chn
HS;
d o ... w h ileL 'in stru ctio n d o ... w hile p erm et d e co nstru ire u ne b ouc le « piloree
pa r le b as »: le corps de la boucle e st ex ec ute en p re mie r, p uis l 'ex-
p re ss io n d e c on tr 61 e e st evaluee, C ette se qu en ce se rep ete iusq u'a ce
qu e l'expression d e c on tr 61 e soit « fa usse », o u e ga le a o.
Le c or ps d 'u ne boucle wh .i le p eu t n e jama is € lr e e xe cu te , c ar l 'expres-sion de c on tr ole p eu t etre fausse d es Ie d ep art. E n rev an ch e le corps
d 'u ne b ou cle d o ... w h ile e st to ujo ur s e xe cu te all main s u ne f ois , C 'e st
la d if fe re n ce e ss en tielle entre ce s deux in st ru c ti on s .
Syntaxe: do
instruction
w h i l e ( expression );
Exemple :
i~,
do II Copie la c h a y n e chm
c h n 2 [ i ] = c h n l [ i ] ; II d a n s l a c h a f n e c h n 2
while ( chnl[i+-+] I~ '\0 ' );
for
U ne b ouc le/o r utilise traditionnellernent une v ar ia ble d e centralequ i su b it l es a ct io n s suivantes:
1. initialisation (une fois avant Ie deb ut de J a boucle):
2. te st d e l'expression de c on tro le ,
3. m ise a jour (une incrernentation, pa r ex er npl e) a la fin de
chaque iteration.
Les t ro is e x pr es si on s dans I'en " tH e d e l'instrucrion fo r d ef in is se nt c es
tr o i s a el i a n s .
Syntaxe : for (expressionl; expressiora ; expression]
instruction,
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 22/68
36 Instructions
To ut e e x pr es si on e st p er rn is e p ou r expres 5ion1 et expre ssions . L'ins-t ru ct io n d e c on tr ol e, expxessiom, d oi t e tr e d e t yp e s ca la ir e. C h ac un ede ces instructions peu t € lre om ise. Si expressiora est ab sen te, le
co rps de la boucle est ex ecute sans condition . En ANSI C99, ex-pression: p eu t a us si etre un e d eclara tio n. L a p orte e d ela v aria ble
declaree es t lirnitee au corps de la b ou cle f or .
Exemple:
for (int i~ELAI ; i > 0; --i) II A t t e n d s u n p e u
Mis a p art !a p orte e d e la v aria ble i, c ette b ou cle f or e st e qu iv ale ntsa la b ou cle w hi Ie su iv an te ;
tn t i -DEtAI ; II Initialise
while( i ) 0) II Teste l ' expression de centrale
--1; II Mise ~ jour
B ra nc hem en ts n on c o nditio n n e ls
g o t o
L 'in struction goto perm et un branchernent n 'importe ou a I'inte-rieur d'une fonction, La des tina tion du saut es t specifiee par Ie nom
d 'un e e ti qu e tt e.
Syntaxe.- goto nom_etiquette;
Une etiquette es t constituee d'un n om suivi d 'un deu x-poin ts (:), qui
precede une instruction.
Exemple:
for ( .. _ ) II Saut hors
for ( .... ) II des boucles imbrIquses .
if (erreur )
goto gestion_erreur;
gest ion_erreur: II I c i o n g,re Ie, erreurs
L'instruction goto et l'etiquetre doivent appartenir it la rnerne fonc-tio n, c 'e st la s eu le restrictio n. N ea nm oin s, l'in stru ctio n g oto n e d oite n a uc un c as f ai re s au te r d e l'e xte rie ur v er s I 'ln re rie ur d'un bloc.
Branchemen t s /lon cond it ion ne l s 37
cont inue
L'instruction continue ne p eu t e :tre u tilise e q u'a J 'in te rie ur d u corpsd 'une boucle. Elle per m et de sauter Ie reste du c o rp s, A i ns l, dans
une boucle w hile ou d o ... whi le , e ll e p as se d ir ec te rn en t a u p ro ch ain
tes t d e l'expression d e c on tr 6l e. D ans une boucle for elle saute a
I' ev al ua ti on d e l'expression d e m is e a jour.Syntaxe: continue;
E xem ple :
for (i ~ -10; i < 10;. ++i)
{
if (i ~~0) continue; II ne pas ten ir compte de 0
break
L 'i ns tr uc ti on b re ak s au te imrnediaternenta I 'i ns tr uc ti on q ui suit lafin d 'u ne b ou cle ou d 'u n e in st ru c ti on swit ch . C el a p er rn et d e t erm i-n er I 'ex ec utio n d 'u ne b ou cle a p ar ti r d e n 'imp o rt e 0 1 : 1 dans Ie corpsde ce ll e- d.
Syntaxe: break;
Exemple:
while (1)
{
if ( c on v n a n d ~ ~ E S C ) break; / / sort ir d e l a boucle
return
L'instruction r e t u r n met un terrne it l'execution d e l a f o nc ti on cou-
rante et redonne I e co nt r61e it la fonction appelante, La valeur deI 'expression contenue dans l'instruction returnest retournee a lafanetion a pp el an te : c 'e st la v a le ur d e r et ou r d e l a f on c ti on .
Syntaxe; return expression;
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 23/68
38 Drfdarat ions
E xemp le :
tn t max( in t a, int b ) / / l.e maximum de a et b
{ return (a>b ? a : b); I
Une fonetion p eu t c on te ni r n'importe quel nombre d'instructions
return.
La valeur de.l'expression return est convertie, si necessaire, dans le
type de Lafonction.
Dans l 'instruction return, l 'expression entre parentheses peut etre
omise. Cela n'a de sens que dans les fonctions de type void, rnais
dans ce cas c'est l'instruction return elle-meme qui peut etre omise ..
La fonction redorme alors le contr61e ala fonction appelante It la findu bloc de fonction.
DeclarationsUne declaration fixe I'interpretation et les proprietes d'un ou plu-
sieurs identlficateu rs..Une declaration qui a!loue de l'espace memoire
It un objet ou une fonction est une dijinition. En e , un objet est
une zone de stockage de donnees con tenant des va leurs constantes
ou variables. Le terrne «objet» a done un gens plus general que
«variable »,
Dans Ie fichier source, lesdeclarations peuvent etre placees au debut
d'un bloc, un bloc de fonction par exernple, ou It l 'exterieur de toutes
les fonctions. Lesdecla rations, cornrne les prototypes de fonctions oules definitions de types, qui ne reservent pas d'espace memoire sont
en principe placees dans un fichier d'en-tete.
Lesdeclarations et les instructions peuvent apparaitre dans n'importe
que! ordre en ANSI e99.
Sy nta xe ge ne ra le e t e xe mp le sLa syntaxe generale d'une declaration est de la forme;
[c1asse de m em orisa tion ] type D1 [, D2, •... ];
cla sse de memorisat ionL'un des specificateurs de classe de memorisation suivants : ex-
tern, static, auto ou register;
t ypeUn type de base ou I'un des specificateurs de type: void, enum
Dec la ra ti on s comp lexes 39
(enumeration), struct ou union, typedef nom.
On peut aussi ajouter It type un qualificateur de type, comme
canst;
D1, [D2, ... J
Une liste de declarateurs, Un declarateur contient au moins un
identificateur, par ex em ple un nom de variable.Voici quelques exemples:
char lettre;
int i,j, k;
static d o u b l e tau x, p rix ;
extern char drapeau,
Les variables peuvent etre initialisees (on peut leur affecter une va-
leur initiale) lors de leur declaration. Les declarations de variables et
de fonctions sont detailiees dans lessections qui suivent,
De c la ra tio n s c omple xe s
Si un declarateur ne contient qu'un seul identificateur, avec ou sans
initialisation, la declaration est dite simple. Dans une declaration
complexe, Ie declarateur contient en outre des informations com-
plernentaires sur Ie type. C'est Ie cas des declarations de pointeur:s,
t ab leaux e t fon c t io n s . On se sert alors des trois operateurs du tableau
17.
Tableau 77 . les o p ir a te u rs d e s d e c la r a ti on s c omp le x es
Operateur Signification
* Po in teu r ver s
T a b l e a u d ' e l e m e n ts d u t y pe
Fonction retournant unevaIem type
(]
()
Les regles de priorites des operateurs du tableau 17 sont identiques acetles donnees pour les expressions.
les declarateurs complexes sont toujours interpretes en meme tempsque l'identlficateur declare. Pu is les eta pes suivantes sont repetees
j usqu 'a resolution de tons les cperateurs:
1. tou te paire de parentheses ou de crochets situee .a droite est
interpretee ;
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 24/68
40 Va.ria.bles
2. s' i I n 'y en a aucune, to uteeto ile situee 1 1gauche est interpretee.
Pa r exemple:
c h ar * p t r c hn ( 1 00 ]i
Dans cette declaration> ptrchn est un tab leau don t le s 1 00 6lt'!ments
son t des poin teurs vers !e type char.
Variables
Toute variable doitetre declaree avant d'etre utilisee, So n type, sa
c l a ss e de memor is a ti o n et eventuellement sa va l eur i n it ia t e sont donnes
pa r certe d ec lara tio n. L e t yp e de la va riab le de te rm in e la p la ce qu'elle
o cc up e en mernoire et la facon dent sera interpretee la sequen ce de
b its sto ck ee, P ar ex em ple :
float E u r o - 2 . 5 F i / / une variable de type floatLa variable euro design e un e zon e m em oire de 4 octets. Le con tenu
de ces qua tre o cte ts e st interprete com me un nornbre e n v ir gu le flot-
tan te, et in ir ial ise It 2,5.
C l a sse s d e memo ris a tio n
La classe de memorisation d'une variab le determ ine sa ponee, sa
t la s se d 'a i loc a t ion et son lien. La porree est soit lirn itee au bloc, soit
etendue au fichier (voir les ca tego ries e t fa p ortie des identificateurs,.
in fr a) . Les va riab les ont d eu x c la ss es d'allocation possibles;
Ctasse d 'a llocation statiq!le
La variable est creee et initialisee une f oi s p ou r toutes, avan t Ie
d eb ut du p ro gramm e. Elle ex iste ra tout au long de l'execution
du p rogr amme .
Class e d 'a l lo ce ti o n au toma t ique
La variable est recreee chaque fois que le programm e entre
dans Ie b lo c o u elle est d efin ie. A la fin de ce b loc.Ia rn ern oire
occupee pa r cette v ar ia ble e st liberee,
La classe de m em orisation d'un e variab le est determ in ee par l a posi -
tion qu'o ccupe sa declaration dan s Ie fichier source et, s'il est p resent,par Ie specificateur de classe de m em orisation . U ne declaration ne
pe ut c on ten ir plu s d 'u n s pe cifica te ur de classe d e m em orisatio n. Le s
sp ec ificateu rs v alid es so nt m on rre s au ta blea u 1 8.
Clas ses de memor is a ti o n 41
Specificateur
Tableau 18 . Le s s pe c [f ic a te u rs d e c la ss e d e memor is at io n
Signification
auto
register
static
extern
L e s variables d e c l a re e s a ve c I e spedfieateur de c l a s s e
de memor is at ion a ut o on t une classe d'al location
a u to rn a ti q u e . L e s p e e i f i c a t e u r auto ne s ' a p p l i q u e
q u ' a u x variable",d e c l a r e e s i l l' inter ieur d 'une
t o n c t i o n . llest r a r e m e n t employe c a r l a c la s s e de
memorisation aurornatique es t appliquee pa r defaut
a c e s variables.
L e s p e c if ic a t e u r de c l a s s e de memorisation
register demande au compilateur de range r, s i
possible,lavariabledans uri registre de l 'unite
c e n t r a l e . En c o n t re p a rt ie , l ' o p e r a t e ur d 'a d re s sa g e (& )
ne po u rra pase Ir e u ti Ii s ( ! avec IIne va riabIe
r eg is te r . .Except ion f ai te d e c e r aspect, le s variables
register s e n t t ra i t e e s comme I e s variablesauto.
Lesvariablesdeciareesc o m r n e static ont t o u i o u r sun e classe d'allocation statique. Le specificateur de
classe de memorisation s tatie est employe pour
declarer lesvariabless t a t i q u e s avecune p o r t e e
lhnitee,
Le s p e d f i c a t e u r e xte rn p erm et d e d e cl ar er d e s
variables1 1c la s se d 'a l l o c a t io n s ta t i q u e q u i p o ur ro n t
etre utilisee d'un bout a l'autre du p rog ramme .
Le tab leau 1 9 montre les differentes c la sse s de memorisa tion et leure ff et s ur la portee et Ia classe d'allocatlon des va riab les .
Tableau 19. C /a sse d e m emo risa tio n , p o rtle e t c ia sse d'auocationd es v a ri a bles
Position de la Identificateur Portee Classedeclaration de classe de d'allocarion
memorisation
A l'exterieur de aucun, extern, Fichier Statique
toute function static
A l 'interieu r d'une aucun, auto, Bloc Automatique
fonction register
A l 'i nt er ieu r d 'u n e extern , static B loc Statiquefunction
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 25/68
42 Types der iv es
I n i ti a lis a t io nL es v ariab les pe uv en t etre initialisees ~on leur affecre un e v ale urinitiale~a l'interieur d e l eu r d ec la ra ti on . L'initialisateur es t consti-
tue du sign e egal suivi d 'un e ex pression constante, Vo ic i quelque sexemples:
in t in d e x - 0, max - 99, *p tre n t - NU LL ;static char nessagel zo] = · 'Exemple!";
Le s variables ne sont pas initia lisees dans les declaration s qui n e de-clenchent pa s la c re atio n d 'u n o bj et, telles qu e les p ro to ty pe s d e fonc-
tion ou les declarations q ui s e re fe re nt It d es d ef in it io ns d e v ar ia bl esexternes.
Toute i ni ti al is at io n e s t sournise au x regles suivantes:
1. U ne declaration de variab le suivie d'un initialisateur formetoujours un e de fin itio n. C e q ui entraine que de l a memoi re
es t a l louee il la var iab le.
2. Une va ri ab l e a classe d 'a lloc( )t ion s ta tique ne peut etre initialisee
q u'a ve c u ne valeur calculab le au m oment de la compilation.
C et te v al eu r i ni ti al e dolt d on e e tr e une expression constante.
3. Dans l es d ec la ra ti on s san s i n it io l is a teur, les variables a classed 'a Jlo ca tio n s ta tiq ue s en t ir np lic ite rn en t i niti alis ee s a NULL(tou s le s o cte ts a 0), la valeur initiale de toutes les autres va-ria hies es t indefinie,
Les r eg le s de conversion de type pour le s a ss ig n at io n s s imp le s s'ap-
p liq ue nt a us si p ou r l'in itia lis at io n .
Types derives
II e st aussi possib le dedefin ir de nouveaux types cornm e les t y p esellumeres et les t yp e s d e ri ve s. Ceu x- ci c omp re n ne nt l es p oi nt eu rs ,l estableaux, Ie s structures et les unions.
Les types de base et les types enurneres sont aussi appeles, de rna-
n i er e g ene ri que , ty pe s a rithme iiq ue s .. L es types arithm etiques et les
pointeurs ferment l 'ensemble de s t y p es s ca la i re s . Les t yp e s t ab l eauxet structures sont appeles les types q g r e g e s .
Typ e s e n um e re sL es t yp es enumeres servent it definir de s va ri ab l es qui ne peuvent
pren dre, au cours du deroulem en r du program me, que certaines va-
S tr uc tu re s, u nio n s e t clwlI1p d e b it s 4 3
l eu rs e nt ie re s d is cr et es . Le s valeurs et Ie nom de ces variab les son t
defin is dan s un e en um eration . L e specificateur de type com mencep ar Ie m ot-d e en um .Par exernple :
e n un ba scu le { O FF , ON ,. N ON ,- 0, OU I };
La liste de s enumerateurs e nt re a cc ol ad es definit Ie nouveau type
e nume re , L 'id en tific ate ur b as cu le e st I'etiquette (t ag ) d e c ette e nume -r at io n . L es i d e n t i f i c a t e u r s de la liste: O F F , O N , N O N ,et O U I s o n r definis
comme de s constantes d e ty pe into
La valeu r de chaque identificateur p re se nt d an s la Iiste peut e tr e d on -n ee de maniere expl ic it e comme N O N '" 0 dans I' ex emple ci-dessus, 5 i
aucune valeur n 'e st a ffe ctee ex plicire me nt I I lIll i de n ti fi ca te ur , c 'e st
sa p osition d an s la l is te q ui determ in era la valeur qui lui sera don-n ee: un enum erateur sans valeur explicite pren d [a valeur 0 s'il est
Ie prem ier d e la l is te . Pour toute a utre p os itio n, s a v ale ur e st e ga le acelle de son p redecesseur augmentee de 1 . Dans I'exernpie ci-dessus,
le s constantes O F F et N O N valent 0 , l an di s q ue O N ' et O U I va lent 1 .
Une fois un typ e e nu merecte fin i, de s va ria ble s d e ce t yp e p eu ve nteIre declarees 11l 'in ter ieur de sa p ortee, Par exemple : . .
e num bascu le t l , t 2 ' " ON ;
Cet te d ec la ra ti on d ef in it d es v ar ia bl es t1et t2 d e ty pe e num b as cu leet initialise t2 a ve c l a v al eu r O N , au 1.
Void un e e nu meratio n san s etiq ue tte :
enum { notr, bteu, vert, cyan, rouge, magenta,. blanc );
Comme on peut Ie voir dan s cet exernple, la def in i tion d'une enu-mera tio n p eu t se f ai re s ans etiquette. Dans ce c as , o n ne peut pa s uti-
l is er c e type enumere pour defintr d es v aria bl es m ais le s constantes
enumerees ainsi peuvent servir a designer un ensem ble de valeursdiscretes, Ce tt e t echnique represente une a lt er n at iv e I I la directiveIIdefine. Les constan tes de l 'e x emp le c i- de ss us an t les valeurs: noir
'" 0, b leu '" 1, ..., b lanc " 6.
les variab les de type enum ere sent souvent u tilise es co mm e d es v a-riables in t ordinaires ~ dan s de s e xp re ssion s arithrnetiques au des
c omp ar ai so n s, p ar e xempl e.
S truc ture s, un io ns e t c ha mp de bitsLes differen tes donnees form an t une un ite logique son t en gene-ra l regroupees dans un e nr eg is treme nt. L a st ru ctu re d 'u n enregisrre-
tnent (le nom , Ie type et l'ordre de ses c ompos an ts ) e st r ep re se n te een C par un t y p e structure.
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 26/68
44 Types derives
Chaque cornposant d'un enregistrement est appele membre (o u
c ha mp ) de fa stru ctu re . 1 1 peut €tre de n'irnporte quel type. Le spe-
cificateur de type structure commence avec Ie mot-cle struet. Voici,
par exemple , un type structure comportant trois mernbres:
struet a r t i c l e c h a r n o m [ 4 0 1 ;i n t q u a n t i t e ;
d ou b l e p r i x ;
};
L'identificateur article est l 'i ti qu e tt e ( ta g ) de la structure tandis que
nom,quantite et prix sont les noms des champs de la structure. Tant
que l'on est a l'interieur de la portee d'une declaration de type struc-
ture, des variables de ee type peuvent €tre declarees:
s t r u e t a r t i c l e al , a 2 , * p A r t i c l e , t a b A r t i e l e [ l OO ) ;
Le s variables ai et a.2 sont de type struet article, pArticle est un
p oin te ur v ers un objet de type struet article, et Ie tableau tabAr-
ticle est compose de cent elements de type struet article.
On peut declarer des variables d'un type structure donne en merne
temps que 1'00 definit cette structure:
s t r u e t a r t i c l e c h a r n o m { 40 J ;i n t q u a n t i t e ;
double prix;
} a 3 ;
S'il ne doit pas €tre fait reference plus tard a un type structure, sa
declaration peut ne pas comporter d'etiquette, Par exemple:
s t r u e t { u n si g n ed c h a r c a r ac t , a t t r b t ; } x c h ar , x e h n[ l O O jj
L e type structure defini ci-dessus a pour membres caractere et at-
tr ibut, tous deux de type unsfgned char. La variable xchar et les
elements du tableau xstr sont du type de la structure sans etiquette.
Les champs d'une variable de type structure sont ranges en mernoire
dans I'ordre de leur declaration. L'adresse du premier membre est
identique a celie de la structure elle rneme, Les adresses des autres
champs et I'espace rnernoire total necessaire au stockage de la struc-
ture peuvent varier car le cornpilateur, dans un souci d'optimisation,
est parfois arnene a inserer des espaces de longueur variable entre
les differents champs. C'est pour cette raison que I'on emploiera tou-
jours l'operateur sizeof pour obtenir la taille en memoire d'une
structure.
S tr uc tu re s, u nio n s e t c ha mp d e b its 45
La macro offsetof, definie dans Ie f ich ie r d ' en- tete stddefh, perrnet
d'obtenir l 'ernplacernent d'un membre a I'interieur d'une structure.
L'expression:
o f f s e t o f ( type_structure, m e m b r e )
est du type size _ t et retourne Ie nornbre d'octets entre l'adresse de
debut de la structure et membre.
Les variables de type structure peuvent etre initiatisees au moyen
d'une liste comportant une valeur pour chaque membre :
s t r uc t a rt i c l e f l e ur = II D e c l a r e e t i n i t i al i s e l a
{ " r o s e ", 7, 2.49 I: /1 variable de type structure Heur
Une variable de type structure a classe d'allocation automatique peut
e r re in it ia l is ee avec la valeur d'une variable de type structure exis-
tante. L'operateur d'affectation est utilise avec des variables du meme
type s tr u c t u re :
t a b A r t i c l e [ o j = f l e u r ;
Cette operation copie la valeur de chacun des membres de fleur
dans les mem bre s corre spondants de tabArt ide [0 J .
On peut acceder 1 1 un champ particulier au moyen de l'operateur
point (.), qui prend comme operandes une variable de type structure
et le 110mde l'un des champs:
f l e u r . n o m
f l e u r . p r i x
/1 L e t ab l e a u ' no m '
II la v a r i a b l e de type d ou b l e ' p r i x '
Une gestion efficace des donnees necessite l'usage frequent de poin-t eu rs v e rs u l7 e s tr uc tu re . L 'o pe ra te ur f le ch e (- » permet d'acceder fa-
cilernent au membre d'une structure designe par un pointeur, Son
operande gauche est un pointeur vers une structure. Par exernple :
p A r t i c l e = & f l e u r ; II p A r t i c l e p o i nt e 5 u r f l eu r
p A r t i c l e - > q u a n t i t e II A c e , s aux m e m b r e s de f l e u r
p A r t i c l e - > p r i x II a u m oy e n du p o i n t e u r p A r t i c l e
Une structure ne peut pas erre membre d'elle meme, mais on peut
ciefinir des s tru c tu re s r e cu rs iu e s au moyen de mernbres qui sont des
pointeurs vers le type de la structure elle-merne. Par exernple, de
telles structures auto-referencees sont utilisees dans l' lmplementa-
tion de listes chainees ou d'arbres binaires,
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 27/68
46 Types derives
Unions
Une union p erm et d 'u tilis er u n rneme em plac em en t m ern oire po urs to ck er d es v ar ia ble s d e ty pe s d if fe re nts , L a d ec la ra tio n d 'u ne u nio n
n e d if fe re d e c elie d'une structure que par Ie mot-de union:
u ni o n n o m b r e { l o n g n ; d o u b l e x ; };
Cet te dec la rat ion cree un n ouveau type union avec l'etiquette nombre
et les rnem bres n et x.
Contrairement aux rnem bres d'une structure, les m em bres d 'uneun ion corn rn encent to us it Ia m em e adresse. La taille d'un e union
est celie du plus grand de ses rnem bres, A in si, la variable n om bre de
ty pe u ni on d e l'e xe rn ple p re ce de nt o cc up e 8 o ct ets .
Lorsqu'un type union a ete defin i, on peut declarer des variab les dece type . A in si :
u n i o n n o m b r e n X ( l o ] ;
declare un ta ble au n x d e d ix elem en ts de ty pe u nio n n om bre. A n' im-porte quel m om ent, chaque elemen t du tab leau peut contenir unevale ur so it d e ty pe d oub le soit d e ty pe lon g. On accede au>:mem bres
d'une un ion de la meme maniere qu'a ceux d'une structure. Parex em ple :
n X [ O j . x = 1 . 2 3 4 ; II A f f e c t e u n e v al e u r
1/ d e t y p e d o u bl e f n x [ o ]
Les v aria ble s d e ty pe u nio n p eu ve nt, comme on I'a vu p ou r l es s tr uc -t ur es , e tr e initialisees pa r un e l is te d 'i ni ti al is at io n. T ou te fo is , d an s I e
cas des union s, cette liste ne com porte qu'un seul in itialisateur. Siauc un m em bre n 'est d esig ne e xp licitem en t, c'est Ie prem ie r m em bre
nomrne dans l a d ec la ra ti on du ty pe u nio n q ui e st in itia lis e:
u n i o n n or n b re l o n g u e u r - { l O O l } ;
A la s ui te d e c et te d ec la ra ti on , l on gu eu r. n a pour valeur 100.
Champs de bits
Les mem bre d'une structure au d'une un ion peuven t aussi etre desc ha mp s de bits. Le s cham ps de b its sont des entiers constitues d'un
nornbre don ne de bits. leur declaration est de la forme:
t y p e [ i d e n t i f i c a t e u r ] : t ai l l e ;
au type est soit un signed in t soit signed in t, identificateur es tIe nom , facultatif du cham p de b its, et taille est Ie nom bre de b itso cc up es e n rnernoire par Ie cham p de b it.
S tru ctu re s, u nio ns e t c ha mp d e b its 4 7
Un champ de bits est stocke en mernoire dans un mot machine
qui est l'unite de stock age elern en taire de lon gueur s izeof (in t). L~taille d'un champ de bits ne peut pas exceder celie d 'un mot ma-
chine. Si un cham p de bits est suffisamm ent petit pour Iaisser un
espa ce su ffisan t, d 'au tres cha mp s de b its peu ven t e tre ra ng es d an s la
m e m e unite de stockage, Un champ de b its de taille nulle est un cas
particulier indiquant que Ie champ de bits suivant do it e tre p la cedans un autre m ot m achine, q u'il r es te ou non de I'espace vacan t
d an s l'u nite d e s ro ck ag e courante, Voic i u n e xemp le d 'u ne s tru ctu red on t les rn ern bres so nt d es c ham ps de b its:
s t r u e t u n s i g n e d i n t b O _ 2 3;
s i g n e d i n t b3_7 5;u n s i g n e d i n t 7;
u n s i g n e d i n t b 1 5 1;
) var;
La var iab le var d e t yp e s tr uc tu re occupe au m oin s deux octets. Ellees t divisee en quatre c ham ps d e b its: v ar. b O_ 2qu i o cc up e les 3 bits
d e p oid s fa ib le , var. b3_7 qui occupe les 5 b its suivants et val. bi Sq u i o ccu pe le b it d e p oid s Ie p lu s fo rt. L e t ro isie rn e rn ern b re n e po rte
pas de nom rnais perrnet de defin ir un «trou» de 7 b its, c om rn e Iemontre la fig ure 5
I b 15 1 (inutilises) I b3_7 IbO 2 1Posit iondubit : 1 5 141312111098 765432 . 1 0
Figure 5. A ffe c ta tio n d es b it s d an s la st ru ctu re d e l 'e xempie p re c ed en :
Les cham ps de b its de type unsigned in t sont interpretes cornme de s
e nt ie rs n o n s ig ne s. Ceux de type sign ed peuven t etre n egatifs dans Iec od a g e e n c omp lem en t it 2. Dans l 'e xe rnp le c i- de ss us , v ar . bo 2 prend
S a va le ur d an s I'in te rv alle [ 0, 7] ta nd is q ue var. b3 7 prend ia siennedans l'intervalle [-16,15]. _
~es ch am ps d e b its different des variab les entieres ordinaires su r plu-sreurs points:
• on ne peut pas appliquer l'operateur d'adresse (& ) a ux c hampsd e b its (rna is on peut l'appliquer it un e v ar ia ble d e ty pe s tr u c -ture en contenant):
• d an s certa in s cas, l'em ploi d e ch am ps d e b its peu t entrainer de sproblernes de portabilite, l'interpretation d es b its Ii l'interieurd 'u n m ot m ach in e e tan t differen te d 'u ne m ach in e it l'autre.
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 28/68
48 Ty p es d e ri ve s
Tableaux
L es tab leaux perm etten t de m an ipuler un gran d n orn bre d 'objets dumeme ty pe . E n C, Ieselernents de s t ab le aux sont de n 'impo rt e quel
type a l'e xc ep tic n d u ty pe f on ctio n. L a d e fin itio n d 'u n ta ble au p re ci se
Ie n o m d u ta ble a u, Ie type et , eventuellemenr, Ie nombre d'elements du
ta b l ea u. P ar exernple:char ligne[81];
Le tab leau l igne est constirue de 81 elements du type char. La va-
riab le lign e elle-m erne est du type derive «tab leau de char ».
D an s u n tab lea u statique, I e n omb re d'elements (la longueur du ta-b le au ) do lt e fre une ex pre ssio n co nstan te. E n A NS I C -9 9, toute ex -
pression entiere it va leu r po si ti ve peut design er la longueur d 'untab leau n on statique dan s un e portee de type bloc. On p ar le a lo rs
de ta b le a ux d e lo n gu e ur v a ria b le .
Un tab leau occupe toujours une z on e m em o ire con tin ue, n on frag-mentee . La tail Ie d 'u n tab lea u est do ne egale a u n om b re d'elements
m u I tip lie p ar la ta i lle d u typ e d es e!t'!m en ts :
sizeof( ligne ) -- 81 * sizeof( char ) -- 81 octets
On peut seceder a chacun de s elements au moyen d'un indice. En
C, contrairement 11d'autres l angage s de p rog ramma tion , le premiere leme nt d ' un ta ble au e st d 'i nd ic e o . L es 8 1 ele me nts d u tab lea u 1 i gn esont don e: l ign e] oj , Ligne] 1], ..., l ig ne [8 01
O n p eu t u tiliser tou te ex pressio n en tiere co mm e ln dic e. C 'est au p ro -g ra rn rn eu r d e s 'a ss ur er q ue la v ale ur d e l'in dic e re ste d an s l'in te rv alle
v alid e po ur u n tab lea u d on ne.
Une c ha in e d e ca raa ire s e st un e su ite d'elements consecutifs d e t yp echar se terminanr pa r ie caractere nul, '\0'. L a l on gu eu r d'une
ch ain e e st egale au nombre de ses caracreres exception faite du ca-ractere de fin de chaine '\0' .E tl e e st rangee dan s un ta b leau de charqu i doit avoir u ne lo ng ue ur superieure d'au m ains un octet 1 1 celle
d e la c ha in e.
Une c h ain e d e c a ra c te re s e te n du s est co nstitu ee d e c aracteres d e ty pe
wchar_t et term i n ee pa r le caracte re n u I e te nd u, 'L \0' .
wchu_t chnlgI2o] - L"Mbert Ie Chat"; II longueur. 14
II caracterss stendus
Un t ab leau mul ti d imens ionne i est un tab leau don t Ies elem en ts son teux- rn e rn e s d e s t ab le aux . Parexernple:
Tableaux 49
short point I50]I 20H 10];
Le tab l eau a t ro is d imen sion s point est form e de 50 elem en ts q uis on t d es t ab le au x 112 d imen sion s . L a decl ar at io n ci-dessus dt'ifinit un
t ota l d e . 50*20*10 - ' 1 0000 e lemen ts de type short references de m a-niere u nivoque p ar t ro is i nd ic es :
point[o][oH9l - 7; II Affecte la valeur 7 au "point"
1/ de "coordonnaes" (0,0,9).
Les tab leaux rnultidimensionnels l es p lu s cornmunernent employes
s en t c eu x It deux d imen sion s , a pp el es a us si matrices . On p eu t c on si -
derer que leurs elem en ts son t ranges en lignes (prem ier indice) etcolonnes (second indice).
E n C ,. u ne r el at io n etroite l ie l es t ab l eaux aux pointeurs: dans la plu-
p art d es ex pre ssion s, Ie n om d 'u n tab leau est co nv erti e n nn pointeur
su r Ie prem ier e lem en t du ta ble au . L'operateur s iz eo f fa it to ute fo is
exception: 5 1 so n operance est un tab lea u, il reto urn era Ie nornbred'octets occupes non par un pointeur m ais pa r le tableau lui-meme.A l a s u it e d e l a d ec la ra ti on :
char msg[] • "Hello world!";
le n om d u tab leau msg p oin te su r Ie carac tere '8' ..En d 'a ut re s t erme s,m s g es t equ iva len t it & m s g [ O j .. A in si, d an s l'in str uc tio n :
puts ( msg ); II Affiche Ia chame
I'a dre ss e s eu le du debut de la ch ain e e st passee It la fo nctio n p ut s ( ).
En i nt er ne , I a fon ction traite lescaracteres de la chain e jusqu'a ceq u'e lle re nc on tr e Ie caractere d e fin d e c ha in e '\0' .
Un ta bleau est in itia lis e p ar u ne lis te contenant une valeur constantepour chacun d e s es e lem en ts :
double x[3] - { 0.0, 0.5, 1.0 },
A la su ite de ce tte de fin itio n, x [o] vaur 0.0; X[l), 0.5 et X[2J, 1.0.Si la lon gueur du tableau est superieure au nombre de valeurs de laliste, les elements restants seront mis a O.Si, au con tra ire, la Iiste es tplu s lo ng ue q ue Ie tab lea u, les v a leu rs en trap seron t ig no rees.
La lon gueur du tab leau peut €tre om ise :
dOUble xll • { 0.0, 0.5, 1.0 }i
D an s c ette d ef in it io n, c 'e st I e n om b re d e v ale urs d e la lis te d 'in it ia li-S ation q ui de term in e la lon gu eu r d u tableau,
U n tab lea u d e ch ar p eu t € tre in itialise p a ru ne ch ain e d e ca rac tere s:
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 29/68
5 0 T yp e s d e r iv e s
char chn[] = 'abc";
C ette d efin itio n a llo ue d e l'e sp ac e memoire pour un tab leau de 4
o ct et s e t l 'i ni ti al is e. E ll e e qu iv au t a :
char chn[] = { 'a', 'b', 'c', '\0' } ;
L ors de Y in i ti a li sa t io n d 'u n t a bl ea u mu lt id im e n si o n ne l, la valeur detoutes le s d imensions, a l 'exception d e l a p rem ie re , doit etre precisee,
Dans le cas d 'un e m atrice , on peut om ettre Ie n orn bre de lign es.Pa r ex em ple :
char msg_erreur[][40] = { "Eneur d'ouverture du fichier !",
"Erreur de lecture du fichier ! " ,
" E r r eu r d 'ecri ture d u fichier !"};
Le tab leau m sg_erreur est form e de trois lign es contenant chacune
un e c hain e d e caracteres.
Poin t eursUn pointeur represente l 'adresse et Ie type d'une v aria ble a u d 'u ne
fonction. E n d'autres terrn es, si x e st n ne v ar ia ble , & x es t u n p oi nte ur
su r x , c 'es t- a-di re l 'ad ress e d e sto ck ag e e n rnemoire d e l a v ar ia b le x.
Un pointeur fa it re fe rence a un em placem en t en memoire, et sontype indique l'interpretation a f air e d es d on ne es presente a ee t em -p l ac emen t . L e s type s po in t eu r s sont appeles pointeur ve rs char , poin-
teur vers int, et ainsi de su it e.
L es n om s de tab leaux et les ex pression com me & xson t des constantesd'adresse ou po in teurs con s tan t s, qu i ne peuvent pa s etre modi fi es . L e sv ar ia b le s d e t yp e pointeur, en revanche, contiennent l'adresse d e l 'o b -
jet auquel elles fon t referen ce, adresse qui peut etre m cdifiee. U nev aria ble d e ty pe p oin teu r est declaree p ar I'ajo ut d 'u ne eto ile (*) de -
v an t l 'i de nt if ic at eu r, P ar e xempl e:
float x, y , * p F l o a t ;
p F l o a t = & x ; II p F l o a t pointe sur x .
A pres cette declaration , x et y son t des variab les de type float, etpFloat est un e variab le de type float * (« p oin te ur v ers float»). A
la s uite d e I'a ffe ctatio n, la v ale ur d e p Flo at e st l'a dre sse d e x .O n u tili se I 'o p era teur d 'i ndi rec t io n * pour seceder aux donnees aum oyen de poin teurs. Si ptr est un poin teur alors *ptr est la valeurde I 'ob jet sur lequel il poin te. P ar ex em ple :
y ~ *pFloat; II s q u i v a u t , y = x ;
Poin teurs 5]
Tan t que pFloat poin te sur x , on peut utiliser *pFloat a la p la ce d ela v ari ab le x . L'operateur d 'in dir ec tio n * ne d oi t, b ie n s ur , e tr e utilisequ'avec un p oin te ur q ui c on tie nt u ne adresse valide.
Un pointeur a ve c la v ale ur 0 es t appele p o in t eu r n u l. En C, les poin-
reurs n uls on t un e signification particuliere. En e ff et , le s o bje ts o u
les fonctions ayan t tous une adresse non nulle , un poin teur nul re-presenters toujours un e adresse invalide. Pour signaler un echec,
les fonctions retournan t un poin teur peuven t done retourner un
poin teur nuL La constante NULL es t definie dans stdio,h, stddejh etd 'a u tr es f ic h ie rs d'en-tete com me un poin teur nul, c'est-a-dire unp oi nte ur d e v ale ur O .
Toutes les v ar ia bl es d e t yp e pointeur on t la rneme t ai ll e en memoire,
quel que soit leur type. D eux ou quatre octets son t hab ituellem en trequis p ou r ran ge r leu r adresse.
D an s le s d ec la ra tio ns d e p oi nte ur s c om pliq ue es , o n a p ar fo is re co ur sa ux p ar en th es es , P ar e xemp le :
l o n g t a b [1 0 j i II T a b l e a u t a b d e 1 0 e l e m e n t s d e type l o n g
l o n g (*pTab)[lo]; II Pointeur pTabvers un tableau
II de 1 0 elements de type long
S an s les p are nth es es, la d ec la ra tio n lo ng * pT ab creerait u n t ab le au
de dix poin teurs vers Ie type long. Les paren theses son t toujoursrequises lors de la declaration de poin teurs vers les tab leaux ou lesfonctions,
A r ith me tiq ue d es p o in te ursOn p eu t e ff ec tu er d eu x o pe ra ti on s arithrnetiques su r les pointeurs:
• un en tier peut ~tre ajoute O LIretranche d 'u n p oi nt eu r;
• on peut retrancher un poin teur d 'un autre poin teur du m ernetype.
C es operation s n e son t en gen eral utiles que lorsque les poin teursp oin te nt su r d es ele me nts d u rn ern e ta blea u. L a t aille d es o bje ts p oin -te s e st a uto rn atiq uern en t p rise e n c om pte lo rs d 'u ne o pe ratio n a rith -m etiq ue s ur l es p oin te urs , P ar e xe rn ple :
i n t a [ 3 ] = { 0 , 1 0 , 2 0 } ; II U n t a b l e a u d e trois e l e m e n t s
int ·pa = a; II pa pointe sur a [ o ]
p a pOin ta nt s ur a [ 0], l'e xp re ss io n pa-t retourn e L In p oin teur sur Ieprochai n elem en t d u tab leau, a [1J , qui est situe siz eof (in t) octets
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 30/68
52 Types derives
plus loin en m emoire. En outre, le nom de tab leau a poin tan t lui
aussi sur a[o], a+ i retourn e aussi un poin teur sur a[lJ .
A in si , p ou r to ut e ntie r i, l es e x p re s si on s su iv an te s so nt equiva le n te s:
& a { i j , a + i , p a +i , & ( p a [ i ] ) I I d e s p o i n t e u r s v e r s I e
I I i - II ' mee l em e n t d u t a b l ea u
S ur ce m eme p rin cip e, les expressions suivantes sent e l l e s aussi equi-
valentes:
a [ i J , * ( a + i ) , * ( p a + i ) , p a [i J I I I e i - , m e e l e m e n t
I I d u t a b l e au
On peut ainsi traiter un poin teur cornme nom de tab leau: pa[iJ
et *(pa+ i) design en t la rn em e cho e. Toutefois, con trairem en t auxn om d e tab leaux , les poin teurs n e son t pas des con stan tes d 'adresse
m a is d es v ar ia b le s. P ar e xempl e:
~a ~ a + 2 ; I I p a p o i n t e s u r a[2]
i n t n = p a - a ; I I n = 2
L a s ou strac tio n d e d eu x p oin te urs re to urn e le n om bre d 'e le men ts d u
t ab le au co rn pr is e ntr e c es p oin te urs . P ar e xemp le , l 'e xp re ss sio n p a-a
retourne la valeur 2 si pa poin te SUT a[ 2]. Cette valeur est du typeen tier ptrdiff_t qui est defin ie dans stddefh (la plupart du tem ps
com me un in t).
L 'a dd iti on d e d eu x p oin te urs , c on si de re e c om m e in ut ile , n 'e st p as a u-
t or is ee . I I e s t t ou te fo is p os si bl e d e comparer d eu x p oin te urs d u m ern e
ty pe , c omme o n p eu t Ie v oir d an s I'ex em ple su iv aru :
I I S o r t i e f o r m a t ee d e s e l em e n t s d ' u n t ab l e a u
I Id ef i n e l G 10
f l o at n om br es [L G ] , * p n ;
f o r ( p n = n om br es ; p n < n o m b r e s T L G j + + p n )
p ri nt f( " %1 6 . 4 f " , * pn ) ;
P o in te urs v e rs u ne fo n ctio n
Le 1 10m d 'un e fon ction est un poin teur con stan t sur la fon ction . Sava leu r co rr espond a l'ad re sse d u co da ge e n m ern oire d e la fo nc tio n.
Par exem ple, le nom puts est lin poin reur sur la fonction puts, quip la ce lin e ch ain e d e ca ra cteres e n o rtie :
n i nc l ud e < s t d i o . h > I I I n c l u t l a d e c l a r a t i o n
I I d e p ut s ( )
i n t ( * p F o nc ) ( c o n s t c h a r " ) ; I I P o i nt eu r s u r u ne f o n e t i o n
II d o n t l 'a r g um e n t e s t u ne
Qu ali fic a te ur s e t d ijin itio n s d e t yp e 53
I I c h a i n e e t d o n t l a v a l e u r
I I d e r e t o u r e s t d e
I I t yp e e n t i e r
p F o n c - p u t s ; I I p F o n c p o i nt e s u r p ut s( )
( * pF o n . c ) (" Z ' a v e z p a s v u Z e l d a ? " ) ; /I A ,p pe l d e p ut s( ) a u
I I m oy e n d u p o i n t e u r
D an s l a d ec la ra tio n d e la v ar ia ble p Fo nc l'e rn plo i d e la p remie re p ai red e p ar en th es es e st obligatoire,
En e ff et , in t *pFonc( cons char ) declarerait pFonc com rne une
fonction retournant un pointeur vers into
Qualificateurs et definitions de type
Les rnots-c les c an st e t v ola til e servent a q ua li fi er I e t y pe d'un objet
l ar s d e s a d ec la ra ti on .
Le qualificateur de type con st in dique que Ie program me n e pourra
p lu s m od ifie r u n o bje t apres sa dec la ra tion .P a r ex emple:
c on s t d o u bl e p i • 3 . 1 4 1 59 2 7 ;
A pres cette declaration , un e in struction m odifian t l'ob jet pi - pipi+ 1 , par ex em ple+ - est illegale, et declen che un e erreur de com pi-lation.
L e q ua lific ate ur d e ty pe v olatile d esig ne d es v aria ble s q ui p eu ven t
etre m od ifiee s p ar d es p ro ce ssu s a utres q ue le p ro gramm e co ura nt.S ur la fo i d e c ette in fo rm atio n, Ie c om pilateu r n 'o ptirn ise ra p as fo r-
c em e nt l 'a cc es a ces var iab les.O n peut aussi associer les qualificateurs de type con st et volatilea ux s pe ci fi ca re ur s d e t yp e:
e x t e r n c an st v ol a t i l e u n s i g n ed c 1i c s _h or l o ge ;
A la s u ite d e c ette d ecla ratio n, la v aria ble d ic s_ ho rlo ge n e p eu t p lu se tre m od ifie e p ar Ie p ro gra mm e; en rev an ch e, u n p ro cessu s ex tern e,
com m e un e carte de gestion des in terruption s d 'horloge, pourra laChanger.
L es q ua lific ateu rs d e ty pe so nt, en g en eral, p la ce s d ev an t les s pec ifi-C ateurs de type. T outefois, lors de la declaration d'un poin teur, lesq ua Ii fi ca te ur s d e t yp e p eu ve nt s 'a pp li qu er a la fois au poin teur et aI 'o bje t q u'il p oin te . D an s le c as o o Ie q ua lific ate ur d oit e tre a pp liq ueau p Oin te ur lu i-m en te, il d oit € tre p la ce ju ste a van t celui-ci,
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 31/68
54 Types derives
L'exemple Ie plus courant d'une telle situation est la declaration d'un
pointeur vers un objet constant. Un tel pointeur fait reference it unevariable, mats on ne peut s'en servir pour la modifier. C'est pour
cette raison que ron nornme ces pointeurs des «pointeurs en lecture
seule . (pointeur r ead on ly ). Par exemple:
i n t v a I l ~ 1 , v a I 2 ~ 2 , * p t r j
c o n st i n t c T a b [ 2 ) ;
c o n st i n t * p t r V e p ; ( on s t j II " po i n t e u r e n l e c t u r e s e ul e "
l i v er s i n t
Les instructions suivantes sont alors autorisees:
p t rV e r s C o n s t ~ & c T a b [o ]j II C h a n g e l a v a l e u r d e
+ + p t r V e r s C o n s t j II l a v ar i a b l e p o i n t e u r
p t r Ve r s Co n s t ~ & v a r l ; II
v a r 2 = * p t r V e r s C o n s t ; I I A C O fS e n " l e c t u r e "
Mais les instructions suivantes ne Ie sont pas
p t r ~ p t r Ve r s C o ns t j II " L ec t ur e s e u l e" ne p e u t l i t r e
II c o p i e d a n s " l e c t u re - e c r i t u r e "
II A c qs e n " e c r i t u re " i n t e r d i t Ip t r V e r s Co n s t ~ 5 ;
restrict
Le qualificateur de type restrict, qui ne s'applique qu'aux poin-
teurs, a ete ajoute it la norme ANSI C99. Si un pointeur declare
avec Ie qualificateur restrict pointe sur un objet modifiable, on nepourra acceder 11cet objet qu'au moyen de ce pointeur, Cela permet
au cornpilateur de produire un code objet optimise. Notez toutefois
que c'est au programmeur de s'assurer que la restriction est bien res-
pectee I
Exemple :
v o i d * me m c p y ( v oi d * r e s t r i c t d e s t , II d e s t i n a t i o n
e on s t v o i d * r e s t r i c t SIC, II s o u r c e
sizef n );
Lors de utilisation de la fonction standard memcpypour copier un
bloc rnemoire de n octets, Ie programmeur doit verifier que les blocs
source et destination ne se chevauchent pas.
Fonct ions 55
t ypedeJ
Le mot-de typedef permet de donner un nouveau nom 11un type
existant.
Exemples:
t yp e d e f u n s i g n e d c h a r U C H A R ;typedef struct { d o u b l e x, y; } POINT;
Dans une declaration typedef, l'identificateur est declare com me sy-
nonyme du nom du type. Sans la presence de typedef, on declarerait
une variable et pas un nom de type.
Apres ces definitions, l'identificateur U C H A R peut etre utilise comrne
une abreviation pour le type urisigned char, et l' identificateur POINT
pour specifier Ie type structure donne.
Exemples:U C H A R C 1, ( 2, t a b [l O O );
P OI N T p o i n t , * p P oi n t j
Fonctions
Tout programme C contient au moins la fonction main, qui est la
premiere it etre executee quand Ie programme demarre, toutes les
autres fonctions n'etant que des sous-programmes.
La definition d'une fonction consiste en une liste d'instructions quiseront executees lors de son appel. Une fonction doit etre declaree
avant de pouvoir etre appelee dans une unite de traduction donnee.
La definition d'une fonction fait aussi office de declaration. Cette de-
claration fournit au compilateur le type de retour de L a fonction. Par
e xemp le :
e x t e r n d ou b l e p u i s s () j
pui ss () est declaree comme une fonction qui retourne une valeur
de type double. Les noms de fonctions etant par defaut des noms
externes, Iespecificateur de classe de memorisation extern peut aussietre ornis,
Les declarations implicites de fonctions ne sont plus perrnises en
ANSI C99. Auparavant, les appels a une fonction qui n'avait pas ete
declaree etaient autorises, et le compilateur presumait alors irnplici-
tement que la fonction retournait une valeur de type into
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 32/68
5 6 Ponctions
D ans l'exernple ci-dessus, la declaration de la fonction puiss ne
eon tien t aucun e in form ation quan t au n om bre et ty pe d e ses arg u-m en ts. L e compilateur n'a done aucun m oyen de verifier si les ar -
g um en ts p asse s Iors d'un appel de cette fonction s on t c omp at ib le s
avec l es a rgumen t s requis p ar c el le -d . L es i nf orm at io n s m a nq ua n te ss ero nt a lo rs fo um ies p ar u n p ro to ty pe d e fo nc tio n,
P ro to typ es d e fonctions
U n prototype de fonction es t une d ec la ra tio n q ui in di qu e a la fo isIe type des param etres et de la valeur de retour d 'une fonction . Parex em ple :
d ou b l e p u i s s ( d o u b l e , d ou b l e ) ; II p ro t o t y p e d e p u i s s ()
C e p ro to ty pe in fo rrn e Ie co rn pilate ur q ue la fo nc tio n puiss accepte
deux argumen ts de type doub le, et retourne un resultat de typed ou ble. L e t yp e d e c ha qu e arg um en t p eu t (ltre su iv i d 'u n n om . C elu i-
c i n 'a ura to ute fo is p as p lu s d e v aleu r qu'un c omm en ta ir e, s a porteeetan t u n iq ue me nt co nfin ee a u p ro to ty pe d e la fu nc tio n. P ar e xem ple:
d o u b l e p u i s s( d ou b l e b a se , d ou b l e e x p o sa nt ) ;
Ies fo nctio ns q ui n e re to urn en t au cu ne v ale ur so nt d ec la re es d e ty pev oid . P ar e xern ple :
v oi d f o nC l ( c ha r * st r ) ; II f o nc l a c c e p t e u ne c ha i n e
I I c o m m e a r g u m e n t e t n ' a p as
/1 d e v a l e u r d e r e t ou r .
P our declarer un e fon ction qui n 'a pas d 'argurn en t, on utilise Ie spe-c ifi ca te ur d e ty pe v oid d an s la li ste d es a rg um en ts :
i n t f o n c 2 ( v o i d) ; I I f on c 2 n e p r en d a uc u n a rg u m en t
/1 e t r e t o u r n e u n e v a l e u r d e t y p e i n t
L es d ec la ra ti on s d e f on ct io ns d ev ra ie nt to ujo ur s s e f air e s ou s l a fo rm e
d e p ro to ty pe s. T ou te s le s f on cti on s C s ta nd ar d s on t d ef in ie s d an s p lu -s ieurs f ich ie rs d'en-tete, P ar e xemp le ,m ath .h c on tie nt le s p ro to ty pe sde toutes les fonctions m athem atiques - sin , cos, pow ,etc. -, tan -d is q ue stdio.h c on tie nt le s p ro to ty pe s d es fo nc tio ns d 'e ntr ee -s or ri estandard.
D i ji m ti o ns d e f o n c t i o ns 5 7
Defin iti on s de fonct ionsL a f orm e la plus gen erale d 'un e defin ition de fon ction est :
[ cl as s e_ m B m o r i s a ti o n ) [ ty pe ) n o m e
[ l i s te _ ar g um en t s ) ) I I d e c l a r a t e u r d e f o n c t i on
{ 1/ c o r p s
1* d e c l a r a t i on s , i n s t r u c t i on s *1 I I d e l aII f o n c t i o n
c10sse m e m o r i s a t i o n
L'un de s specificateurs d e c1 asse d e m em orisa tio n e xte r~ Oll
static . La c1 asse de m em orisation par defaut des fonctions
etant extern , la p lu part d es d efin itio ns d e fonctions n e com -
porten t pas de specificateur de classe de memo ri sa ti on .
t y p e
Le type de la valeur de retour de la fonction. Cela peut (ltre
void ou tout autre type a I 'e x ce pt io n d 'u n t ab le au i
n o m
L e n o m d e la fo nc tio n,
Ii 5 t e _ o r g u m e n t s .
L es d eclaratio ns c orres po nd an t au x a rg um en ts d e la fo nctio n,S i elle n 'e n p osse de p as, la liste sera v id e.
V oic i u n ex ern ple d e d efin itio n d e fo nc tio n ;
l on g s o m m e ( i nt t a b [ ] , i n t Ion) /1 E f f e c t u e l a s o m m e d e s
( II I o n p re m i e r s e l e m e nt s du t a b l e a u t a b
Int i;l on g r e s u l t a t ~ 0 ;
f o r ( i = 0; i < I o n ; ++i)
r e s u l t a t +~ ( l o n g ) t a b [ i ] ;
r e t u r n r e su l t a t ;
P ar d ef au t, l es noms de f onc ti ons s on t d es n om s e xte rn es ; le s f o nc ti on sd 'u n p ro gr amm e p eu ve nt a in si (l tre r ep art ie s p ~rmi p lu sie urs f ic hie rsS o ur ce e t a pp ar ai tr e n 'imp or te a u d an s c es f ic hi er s s ou rc e.
Toutefois les fon ction s de la classe static n e peuven t etfe appeleesqu'lt partir d e l'u nite d e trad uc tio n d an s la qu elle e lle s ~ on t d efin ie s,M ais il n 'est pas possib le de defin ir des fonctions qU I ?n t Ie b loccom rn e portee -en d'autres terrn es, on n e peut pas defin ir un e fon c-ti on 1 1l 'in te ri eu r d 'u ne a utr e f on ctio n.
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 33/68
58 Ponct ions
Les arguments d'un e fon ction son t des variab les ordinaires don t laportee es t confinee Ii la fo nc tio n. L ors de l'appel de l a fonct ion , diesso nt in itia lis ee s av ec le s v ale ur, d es a rg um en ts p ro ve nan t d e la fo nc-tion appelante,
Les in stru ctio n s d u c orp s d e fa fonc t ion precisent ce que do it faire lafonction. Lorsque, au cours de I'execution, I e p r og r amme rencontre
un e in struction return ou la fin du corps de la f on ctio n, I e controle
es t r e n d u 1 1 la f on c ti o n appe lan te .
On a pp el le f onc ti on recursive, un e f on ct io n q ui s 'appe l le e lle-meme,
q ue ce so it d ire ctern en t o u in direc te rn en t. L e l an ga ge C p erm et Ia d e-
f in it io n d e f on ctto ns re cu rsi ve s, le s v ar ia b le s d e classe de memo ri sa -
tion autornatique sont r ec reees (gene ra lemenr dans la pile) a chaqueappel de la fonction.
Le declarateur de fonction que nous venons de voir est ecrit dansIe s ty le p r o to t yp e . Toutefois, les cornpilateurs ac tu e ls comprenn en t
en core le s ty le Ke rn i gh an & Ritchie, plus ancien , et dans lequel Iesi de nt if ic ate ur s e t l es d ec la ra ti on s d e ty pe d es a rg um en ts s on t d ef in ise n d eh or s d es p ar en th es es :
l o n g s o m m e ( t a b , I o n ) I I l i s t e d e s i d e n t i f i c a t e u r s d ' a rg u m e n t s
i n t t a b [] , lon; II d e c l a r a t i o n d e s a rg u m e n t s
{ ... } I I Corps d e I a f on ctio n
En ANSI C 99 ,. le s fo nc tio ns p eu ven t H re definies comme inline (e nl igne ) . .Le specificateur de fo nc ti on i n l i n e d er na nd e a u c or np il ate ur
d 'o pti rn is er la v ite ss e d e l'a pp el d e fo nc ti on , e n p la ca nt g en er a leme nt
le co de m ach in e d e la f on ct io n d an s la p rocedu r e d 'a ppe l. Le mo t- ol ein lin e est place devant la d efin itio n d e la fonction:
i n l i n e i nt m a x ( i n t x , i n t y )
{ r e t u r n (I >~ Y ? X : y ); }
Dans le c as o u une fo nc tio n e n lig ne contient trop d'instructions, le
cornpilateur ignorera Ie speciflcateur inline et generera un appel defonetion h ab itu e] . ..
U ne fo ne tio n e n lig ne d oit e tre d efin ie et a pp elee d an s la me rn e u n it ede traduction . E n d'autres terrnes, Ie corps de la fonction doit etre
« visib le" lorsque «I'appel en lign e » est com pile. C 'est plutot un eb on ne idee que de defin i r - con trairern en t aux fon ction s ordi n aires- les fon ction s en lign e dan s un fichier d'en-tete,
Les fonctions en ligne son t une alternative aux m acros avec para-metres. Lors de l'expansion d'une macro, le preprocesseur effectue
sim ple me nt u n rernplacement de texte, L es f on ctio ns e n li gn e q ua nt
App e l s d e fo n c ti o n 59
a dies, se com porten t com me des fon ction s norrnales - Ie com p i-lateur ver i f ie la com patib ilite des argum en ts, par ex em ple - m aisle ur c od e c om p ile e st i ns er e a l 'e rnp la ce rne n t a pp rop ri e d an s Ie c od e
c om pile d u b lo c appelant.
Appels de fonc tion
Un appel d e fo nc tio n e st un e e xp res sio n d on t la v ale ur et Ie type sontceux de la v ale ur d e reto ur d 'u ne fo nctio n.
L or s d e l'appel d'une fonction, le nombre et Ie t yp e d es a rg um en tsdoiven t ccin cider avec ceux de ]a defin ition de la fon crion , T oute
expression, y c om pr is le s constantes et le s expressions arithmetiques,
peut etre don nee corn me argum en t dan s un appeJ de fon ctio n.L orsq ue la fo nc tio n es t appelee, la valeur de l'argum en t est copiee
d an s I 'a rg um en t co rres po nd a nt d e la fonction ! Par exernple:
d o u b l e x ~0 .5 j y , p u i s s ( ) ; II D e c l a r a t i o n
Y • p u i s s ( 1 . 0 + x , 2 . 5 ) ; II L 'a p pe l d e p ui ss r e t ou rn e
I I I a v a l eu r d o u bl e (1.O+x)2.S
On dit alors qu e le s a rg um en ts so nt p asse s it l a f o nc ti on p ar v ale ur.
La fone tion elle-m em e n e p eu t p as m od if ie r l a v ale ur d es a rg um en tsdans la fonction appelante: elle n 'a a cc es q u'a ux c op ie s l oc al es d e ce s
valeurs,
S i 1 '0 n desire qu'une fonction m odifie la valeur d'une variable, la
f on ct io n a pp el an te doit p as se r e n a rg um en t a l a f on c ti o n I'adresse
de cette varia b le: la variab le doit etre passee it l a f o nc ti on p a r r 4 f1 !-
renee . C 'e st le c as p ou r le s f on ctio ns 5 can+, t i m e e t t ou te s celles avantco mm e argum en t un t a b l eau . Par exernple:
d o u b l e e c h a n g e ( d o u b l e * p x , d o u b l e ' p y ) II E ch an ge l e s
I I val e u r s d e
II d e u x v a r i ab l e s
{ d o u b l e z = * p x ; * p x • * p y ; * p y • z ; }
Le s a rg um ent s d es f on c ti on s subissent d es c on ve rs io ns d e ty pe irnpli-cites:
• si la fonetion a ere declaree sous form e de prototype (com me
c 'e st h ab itu elleme nt le c as ), c ha qu e a rg um en t e st c on ve rt i d an sIe ty pe d e I'a rg um en t c or re sp on d a nt d an s I e p ro to ty pe ;
• s' il n'existe pa s de p ro totype , chaque a rg um ent e n ti er subit tinep r omo ti on e n ti er e, et les a rg um en ts d e ty pe flo at sont convertis
en d o u b l e .
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 34/68
60 Fonctions
Fonct ions a nombre d 'arguments variable
Les fon etion s qui peuven t e;tre appelees avec un n orn bre variable
d 'a rg um e nt s d oi ve nt touiours avoir un nombre fixe d'argurnents obli-
gatoire: -au m in imum un- et un nombre variab le d 'argumen ts
[acultatifs. Un exernple b ien con nu est Ie cas de la fonction pr.in tf : lach ain e d e ca rac te re corr e spondent a u fo rm at e st u n arg um en t obliga-to ire a lm s q ue to us le s a utre, a rg um en ts so nt fac ulta tifs. E n in tern e,
prin tf determ in e Ie n om breet le ty pe d e t ou s le s a ur re s arguments
a p artir d es in fo rm atio ns e on te nu es d an s la ch ain e d e fo rm at
D an s Ie d eclara teu r d e fo ne tio n, les arg um en ts fac ultatifs sen t in di-
q ue s p ar t ro is p oin ts . P ar e xe rn ple :
in t prin tf( char ·chn , ... ); II Prototype
Dans la d ef in itio n d e la f on et io n, o n a cc ed e au x arguments tacultatifs
au moyen d'un ob jet de type va,~ list qui contient le s in format ions
s ur c es a rg um en ts . C e ty pe e st d et ln i d an s le f ic hie r d 'e n-te te stdarq.h,avec les macros va start, va _ arg et va _end, utilisees pour gerer le s
arguments.
A fin d e li re l es a rg um en ts f ac ul ta tif s, la fo nc tio n d oit ac co mp lir le staches suivantes: -
1. D ec la re r u n o bjet d e ty pe v a~ list. D an s I 'e xem ple su iv an t ilse
nomrnera arglist.
2 . Appeler la macro va start afin d 'in in aliser l'ob jet arglist
d an s Ie b ut d 'o bten ir le p re mier arg um en t fa cu lta tif. L es p ara-
m etr es d e v a~ sta rt sont I 'ob je t a rg li s t et Ie nom du dernierargument obligatoire,
3. A ppeler la m acro va~arg avec !'ob jet arglist que l'on vientd 'in itia lise r a fin d 'o bte nir seq ue ntiellern en t ch acu n d es a rg u-
ments facultatifs, Le d eu x ieme p ar ame tr e de va ~a rg co rr espondau ty pe d e l 'a rg u rn e nt f ac ul ta ti f obtenu, .
A la su ite d e ch aq ue a pp el d e la m acro v a~ arg , l'o bjet a rg liste st p re t . a donner Ie prem ier argum en t facultatif qui n 'a pasencore e t t ' ! lu . Le resultat de va_arg est du type specifie par Ied eu x iem e a rg um ent .
4 . A pres q u'e lle a fin i d e lire la Iiste d 'a rg um en ts, la fo nctio n d oltappeler la m acro va en d avan t d e ren dre Ie co ntr6 le a . I a f on c -t io n a pp el an te , L 'o b je t a rg li 5t es t Ie s eu l p ara rn etre d e v a~ en d.
Editio n d e lie n s 61
Void t'e xemp le d 'u ne f on ctio n, max, q ui a cce pts u n n om bre v aria ble
d 'arguments:
/I Dstennine Ie m ax im um d" un certain oom bre
/ / d "ent ie rs p osi tifs.
II Param ~tres: un no mbre variable d e v al eu r' s
1/ positives de type uns i gned int.
II Le dernier argum ent doi t litre 0.,
II Valeur de retour Ie plus grand des argumen ts
#include (stdarg.h>unsigned fn t m a x ] unsigned int prem , .. ,. )
{
uns ign ed in t m axarg , arg :
v a_ list a rg lis t; II t.' o bjet liste
II f ac ulta tiv e d 'a rg um en ts
v<l_start( arglist, prem ); II Prepare argl is tII ~donner Ie
1/ p remie r a rg um en t
II f acu l t at if
a r g - m axarg - prem;while ( arg !- 0 )
{ a r g - v a _ a r g ( a r g l i s t , u n s i g n e d )j
II o b t i e n t u n a r g um e n t
if ( arg > maxarg ) rnaxarg - arg:
v a_ en d( a rg li st )j II f i n i de lire l e ;
II arguments facul tat is
r e t u r n rnaxarg;
,E dition de lien s
Un idenri f ica teur declare p lu s d 'u ne fo is, q ue e e so it d an s d es p ortee sdifferences (des f ic hi er s d if fe re nt s, p ar exernple) o u id en tiq ues p eu t
f a ir e r ef e ren ce a la meme variab le ou a la m em e fonction . II doita lo rs e tr e « lie» pour perrn ettre, par ex ern ple, qu 'un e variab le soit
u ti li se e d an s d if fe re n ts f ie hi er s s ou rc es . T o ut i de n ti fi ca te ur e st l i e pa run lien e xi eme , i n te rn e ou n 'est lie par QUCI. I I1 lie n. C es t ro is fo rm es d el ie n a n t l a s ig n if ic at io n s ui va n te :
L i en e xt emeUn iden ti f ica teuravec l ien exter t te rep re sen te Ie m ern e o bje t, o ula m em e fon crion , dan s tou t Ie program me; c'est-a-d ire dan s
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 35/68
62 EdiriOll d e lie n s
tous les fichiers sources et toutes les bibliotheques du
program me. U n tel iden tificateur do it etre co nn u de l'editeurd e lie n.
Lorsque se presente une deux ierne declaration d'un m em e
iden tificateur avec lien ex tern e, l'editeur de lien s associe Ie
meme objet ou 1 0 1 r n er ne f onc ti on 1 1 c et id en tif ic ate ur, L a d e-
claration d'un objet externe d eja e xis ta nt e st p arfo is appeleed ec la ra tio n p a r rlJ6ence.
Lien in terneUn id en tific ate ur a ve c l ie n i n te rne represen te Ie rn ern e o bjet ~
ou la merne fonction - dan s une unite de traduction precise.
L 'ed iteu r d e lie n n 'a a uc un e in fo rm atio n su r le s id en tific ateu rs
a ve c lien in ter ne ; ils restent «internes» a l'unite d e t ra du c-t ion.
Aucun lien
D ans Ie cas oii un identificateur n 'a aucun l ien , route declara-t io n f ait e avec c et id en tific ate ur d ec la re q ue lq ue c ho se d e n ou -
veau ; un e n ou velle variab le au u n n ouveau type, p ar ex ern ple,
L e lien d'un identificateur est determ in e par sa cia sse de m em ori-
s at io n ; c 'e st -a -d ir e p ar 1 0 1 lo calisatio n de sa d eclaratio n dan s Ie pro -
gram me et par 1 0 1p re se nc e d 'u n specificateur de classe, L e s i de n t if ic a -
teurs de variab le et ceux d e fo nctio n so nt les seuls a pouvo ir p o ss ed erun lien ex tern e o u in tern e. TOllS l e s au tr e s, y co mpris ceux des va-
riables a classe d e m em orisatio n au to matique, n 'o nt au cun lien (vo irle tableau 20).
Tableau 20. L i ens d e s i den t if ic a t eu r
Lien Id en tificateur av ec ce lien
Noms de variabledeclan!eavecIe s p e c i f i e a r e u r de c l a s s e
de memorisation extern, ou bien declaree e n d eho rs detoute fonction et sans specificateur d e classe de
memor isa tion .Noms de fonc tion d e f in ie s an s l e
specificateur static.
Noms de variableou de fonction declaree en d ehor s de
toute fonction et avec le specificateu r de da sse de
memorisation static.
Tou s l es aur re s identificateurs, comrn e les argumentsd 'u n e fo n c ti on ,
Externe
Interne
Aucun
D ir ec ti ve s au p r ep r oc e ss eu r 63
L 'irn ple rn en ta tio n d e l'e dite ur d e lie n im po se so u v e nt d es r estric tio ns
au form at des noms externes (identificateurs a ve c l ie n externe): cer-
tains editeurs ne reconnaissent q ue le s h uit p rem ie rs caractere d'un
n om , et n e fo nt pas la d istin ctio n en tre m ajuscules et minuscules.
D irectives au preprocesseurL e c om pilateur C effectu e un traitem em en t p relirn in aire de ch aque
fic hie r s ou rc e a va nt d e p ro ce de r a l a t ra du ct io n e ff ec ti ve . L e p re pr o-
cesseur supp rim e to us les co mm en taires et rern place les m acro s p ar
leu r de fin it ion .
C haque d irectiv e au prep ro cesseur est p lacee su r un e lign e a part en -tiere co rn men can t par le caractere #. S i Ia directive est tro p lo ngu e,
elle se poursuivra sur la lign e suivante en placan r un an tislash (\)
ju ste a va nt le p as sa ge a l a l ig ne.
#define
La directi ve #define perm et de definir d es macr o s.
Syn taxe: = d e f i n e n om[ ( lis te _p a ram! ?tr es) ] [ te xte _s ub st ]
Le preprocesseur remplace chaque occurrence de n om ou de
nom(liste_paramrttres) dan s Ie code source par te xie suo si.
Exemple:
# d e f i n e T A I L L E _ T A M P 5 1 2# d e f i n e M A X ( a , b ) « a ) > ( b )
1/ ( o n s t a n t e s ym b o l i q u e(a) : (b))
Ces d i rec tives d e f nissent le s macros T A r L L E _ T A M P et M A X . Quand Ie
te xte d e s ub stitu tio n e st u ne e xp re ss io n c on sta nte , 1 0 1 mac ro e st a pp e-
lee cons tan t e symboli que . Le s mac ro s p eu ve nt e tre ir nb riq ue es, e t, un e
f oi s d ef in ie s, u til is ee s d an s 1 3 de fi n i ti o n d 'a u tr es m a cr os .
D an s l'ex ern ple preced en t, les paren theses so nt n ecessaires afin que
la su b s titu tio n s 'o pe re c orre cte me nt lo rsq ue M A X est presen t dan s un e
ex pressio n, o u lo rsq ue a et b so nt rern places p ar u ne ex pressio n co m-plexe, Par exernple, le preprocesseur transforrne l'appel d e ma cr o;
r e s u l t a t ~ 2 * M A X ( x , Y & O x F F ) ;
en
r e s u l t a t • 2 * ( ( x ) > (y & o x F F ) (xl (y & o x F F ) )i
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 36/68
6 4 Dire c ti ve s au pr iproce sseu r
L'operateur #
D an s Ie tex te d e su bs titu tio n, le s p aram etre s d e la m ac ro p eu ve nt etrep re ce de s p ar l'operateur # (operateur de conversion en charnel. Le
p re pro ce sse ur p la ce ra d an s ce c as Ie p ararn etre co rresp on da nt e ntregu il leme ts , I e co nve rt is san t ainsi en chain e de caractere,
Exemple :
# de fi ne im p r_ en t( i) printf( "value" #i " ~ %d", i
Si x et y so nt d es v aria ble s d e ty pe int, l'instruction:
impr_ent(x-y);
es t remplace par:
printf( "valeur ""x-y'''' ~ % c t ", x-y );
Le s chatnes d e c ar ac te re s c on se cu ti ve s e ta n t c on ca te n ee s, c et te e x pr es -
sion equivaut it :printf( "valeur x - y ~ % . d ", x-y );
Eopera t eur ##
Si u n p ar am et re a pp arte na nt a une m acro est precede ou suivi parl'operateur ## (operateur double-diese ou de ) dans Ie tex te de sub-
stitution , Ie preprocesseur con caten era les tok en s situes de part et
d 'au tre d e ce t o pe rate ur, en ig no ra nt les e sp ac es . S i le te xte re su ltan tc on tie nt u ne m ac ro , la s ub stitu tio n d e te xte s 'e ff ec tu er a it nouveau.
Exemple :
# d e f i n e m o nt r e ( var, n o m b r e ) \
p r i n t f ( #var # n o m b r e " ~ % .1 f\n ", var # # n u m )
Si la variab le de type float xS a pour valeur 1 6.4 , alors I 'appel de lamacro:
m o n t r e ( x , 5 ) ;
e st rem p la ce p ar:
printf( "x" "5" " ~ %.If\n ' ' , xS );II S o r t i e : X 5 ~ 1 6 . 4 \ n
Dire c ti ve s au preproc e sseur 65
#Unde f
La d ir ec ti ve # un d ef a nn u le la definition d'une macro. Cela permet
de chan ger la defin ition d'un e m acro, ou d 'appeler un e fon ction qui
porte Ie merne nom.
Syntaxe: Uundef n o m
II n'est pa s necessaire de preciser un e liste de pa rame tr e s, rneme si
la m acro precedem men t defin ie avec ce n om corn portait des para-
metres.
Exemple :
#include < c t y p e . h >
#u nde f en maju sc
c = enmajusc(c); J / Appelle Ia fonctionenmajusc(}
#include
La directive #include demande au preprocesseur d'incorporer, a l'en-d ro it o u elle e st p lac ee d an s le p ro gra mm e, u n fich ie r d on ne .
Syntaxe:
#include <nom_deJjchier>
#include "nom_deJichier"
Si nomdeJichier est place en tre les signes «In ferieura »
et«superieur it », Ie preprocesseur n e cherchera ce fichier que dan s
certa ins reper toi res , habituellernent p re cis es d an s la v ar ia ble d 'e nv i-ronnernent I N C L U D E .
Si nomdeJichier est place en tre guillem etsl, Ie preprocesseurc he rc he d 'a bo rd I e f ic hie r d an s I e re pe rto ire c ou ra nt.
Si nom_deJichier c on tie nt le c hemi n d 'a cc es 1 1u n r ep er to ir e p re cis ,
Ie p re pro ce ss eu r n e c he rc he ra q ue d an s c e re pe rto ire .
O n ne place en general dans les directives #include que des nom s
d e fich ie rs d 'e n-te te se term in an t p ar.h.C es fi ch ie rs c on tie nn en t d es
1. O n u til ise le s g ui lle rn et s d ou bl es a ng lo -s ax on s ( " " ) e t n on le s g ui lle me ts f ra nc ais
usuds (< < »).
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 37/68
66 Dire c ti ve s a u p r ep r o ce ss e ur
declarations et des definitions de macros, les prototypes de fonctions,
mais a us si, lo rs qu e c 'e st n ec es sa ir e, d'autres directives #include.
Dans l'exemple suivant, un des fichiers a incorporer est choisi selon
la valeur d'une constante symbolique:
# i n c l u d e < s t d i o . h >
# i n d u d e " p r o j e t . h "
# i f V E R S I O N == 1
I I d e f i n e M O N P R O J_H " vers i o n 1 . h "
Itelse
# d e f i n e M O N P R O ] H " v e r s i o n 2 . h "
# e n d i f
# i n c l u d e M O N PR O J H
#if, #elif, #eise, #endif
Ces directives permettent de presenter au compilateur des portions
du code source differentes selon certaines conditions. On peut ainsi
compiler differents ensembles d'instructions d'une generation du
programme executable it l 'autre. On emploie, par exemple, cette tech-nique afin d'adapter un seul programme a un eventail de systernes
cibles sans modifier Iecode source.
Syntaxe:
l I i f e x p r e s s i o n 1
[ t e x t e l ]
[ # e l i f e x p r e s s i o n 2
t e x t e 2 ]
[#elif expressionin}
t e x t e ( n ) ]
[ # e l s e
t e x t ( n + l ) 1
#endif
Chaque directive #if peut etre suivie par un nornbre quelconque
de directives #elif, et par au plus une directive #else. La portion
de code source conditionnelle doit etre terminee par une directive
#endif.
Dire c ti ve s a u p r ep r o ce ss e ur 67
Le preprocesseurevalue express.iont, express ion2, etc., en sequence.
A la premiere evaluation a « vrai» (c'est-a-dire differente de 0), Ie
code correspondent est tr ai te , S i a uc un e expression n'est vraie, la di-
rective #eIse, si elle est presente, est traitee,
expiessiom, express ion2, etc., doivent etre des expressions
constantes entieres, L'operateur de conversion de type ne peut pasetre employe dans le s directives au preproces seur.
Le texte assode aux differentes conditions est constitue de code source
et peut c ompor te r d 'a utr es directives au prep ro cesseu r et des instruc-t ions C ordinaires, Celui correspondant aux conditions non realisees
e st c or np le temen t s uppr ime du programme.
L'operateur defined
L'operateur defined permet de verifier si Ie nom d'une macro existede ja .
Syntaxe: defined no m
Si une definition valide de nom existe deja, eet operateur retourne
une valeur non nulle. Dans le cas contraire il retourne o. Un nom
de macro cree avec une directive #define Testedefini jusqu'a ce qu'il
so it supprime par la directive #undef. On considere qu'un nom de
macro est defin i m em e si aucun tex te de substitution n 'a ele specifie
apres n o m dans la directive #define.
L'operateur defined est frequement employe dans les directives #ifet #elif:
n i f d e f i n e d ( V E R S I O N )
l I e n d i f
l 'operateu r defined, contrairement aux directi ves #i fdef et #i fndef,
retourne une valeur dont on peut faire usage dans une expression:
l I i f d e f in e d( V ER S I ON ) & & d e f i n e d ( S T A T U T )
# e n d i f
#ifdef et #ifndef
Les directives #i fdef et #i fndef perrnettent d'inserer directement du
texte selon que le nom d'une macro est, ou n'est pas, defini.
Dir ec tiv e s a u preprocesseur 69
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 38/68
6 8 Dir ec tiv e s a u p re p ro c es se ur
Syn taxe:
#ifdef no m
#ifndef no m
La d i r e ce iv e #i fdef est «vraie» si no m est d efin i, et la d irec tiv e # i f n-
def est «vraie» si n om n 'e st . p a s d efin i, T ou te s d eu x n ec es site nt d 'H reterm in ee s p ar u ne d irectiv e # en di f.
Les d eu x c on st ru ct io n s s ui va nte s s on t e qu iv al en te s:
!tifdef VERSION
#endif
!tif d e f i n e d ( V E R S I O N )
I t e n d i f
#line
L es erreurs rencon trees lars de Ia com pilation son t reperees par Ie
n om d es fich iers so urce et les n urn ero s d e lig ne a u e l les appara issen td an s c es fichiers, La directive #line perm et de changer le num ero de
lig ne et Ie n om d u fich ier d an s I e fic hier so urce lu i-m ern e,
Syntaxe: #line n ou ve au _llume ro [ nom_ de Jic hie rl
A p ar ti r d e I 'e nd ro it a u e st p la ce e c et te d ir ec tiv e d an s I e A c hie r s ou rc e,les lign es son t nurn erotees en commen can t it n ouv ea u n um ero . Si
nom_deJichier est aussi precise, le com pilateur indiquera ce n omd e f ic hie r d an s to ut n ou ve au m es sa ge d 'e rre ur,
L e n ouveau n om de fichier doit etre place entre guillem ets, et nou-veaU_.I lUmBrOd oit e tre u ne constante entiere.
Exemple:
!tline 5 0 0 " m o n _ p rg . c "
La directive #line est particulierernent em ployee dans les pro-gram mes perrnettan t de traduire du code source d'un autre langagev ers le la ng ag e C . L es m ess ag es d 'e rre urd u c orn pila te ur C fe ro nt a in sireferen ce au fich i er et au n um ero de ligne du code source de depart.
L e n um ero de J ign e et Ie nom de fichier couran rs sen t accessibles vial es mac ro s p redef in ie s L I N E et Fl L E
Exemples:
printf( "numero de 1 i g n e dans Ie source courant :);
printf( %d\n", _LINE_ );
p r i nt f ( "Fichier s ou rc e :);pr irrt+ ( %5\n", _FILE_ );
#pragma
La di rec tive #pragmaest / i e e a l ' implementa tion . E lle perm et de definir,
pour un campi lateur d on ne, n 'im po rte q uelle d irectiv e d e pretraite-
ment.
Syn taxe: #pragma commande
T ou t co rn pilateu rq ui n e reco nn ait p as commande i gno re ra l a d ir ec ti ve
#pragma.
Exemple:
# p r a g m a p a c k ( l )
L e c orn pila te ur C d e M icro so ft in terp rete cette d ire ctiv e c omm e un e
in struction pour align er les m em bres des structures sur les lirn itesd 'o cte ts d e r na nie re a suppri m er taus les « trnus» n on souhaites (ce
com pilateur com pren dra aussi les pragm as pack (2) et pack (4) cor-
respon dents aux aJ ign em en ts sur Ie m otet le m ot doub le).
L es p r agmas s ta n d ar d e x _L I M I T E D _ R A N G E , F E N V _ A c ee 5 5, e t FP_ C O N T R A C T ,
inrroduits it partir de 1 .'A NSIC 99, seron t decrits plus loin , dans lasection Po n c ti o ns m a ih ema t io u es . .
Le s ma c ro s s ta n d a rd p r ed ijin ie s
II ex iste huit m acros predefin ies en C . L eur n om commen ce et fin it
p ar d eu x c ara cte re s d e so ulig neme nt C).· E lles son t decrites dan s Ie
tableau 21.
Tableau 21 . "us mac ro s s ta n d a rd p dd if in i e s
Macro Tex te de subs ti tu ti on
Lenumero de l ig n e (i J l 'in terieur du fichiersourcedonne) o u la mac ro __ l I N E _ _ apparalt,
Le n om du fichier source dans lequeI Ia macro_ _ F IlE _ _ apparatt,
_ _ L IN E
_ _ F I L E
71
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 39/68
70 B ib li o th e que s ta n d a rd
Tableau 21 . Les ma c ro s s ta n da r d p r id iji ni es ( su it e)
Macro T ex te d e s ub st it ut io n
L e n om d e la fun ction d an s laquelle la macro__ fu nc__ apparalt,
La da tede compil ati on .d an s I e format "Moisjo ur ann ee ", E xemp le : "Dec 1 8 2002"
L'heure de compila tio n, d an s I e format
"hh.mmss"
La con sta nte ent ie re 1 si I e compi la teur e st
c o n fo rme au s tandard A N S I
_ _ S T D _ H OS T E D _ _ (*) L a c o n s t a n t e e n t i e r e 1 s i l'implementation
cou rante e st d e type «hebergee »; sin on 0
_ _ S 1 O _ V E R S I O N_ _ (*) L a c o n s t a n t s e nt i e re 1 9 9 90 1 L 5 i
l 'implementat ion est confo rme au C99 , Iestandard C ANS I de janvier 1 9 9 9
__func (*)
D A T E
TIME
S T D C
Dans le langage ANSI C99, on distingue d eu x ty pes d'environne-
m en ts d 'ex ecution pour la com pilation des program mes C : l'un dan s
lequel le program me est «heberge» par un environnem en t hote et
l'autre d an s le qu elle p ro gramm e est «autonome ». Contrairement au n en viro nn ern en t h ote , u n e nv iro nn em en t « autonome » n e fo ur-
n ira q ue les ca pac ite s d e la b ib lio th eq ue stan da rd te lle s q u 'elles so nt
d efir ue s d an s les fichiers d'en-t€tefloat.h, iso646.h, limits.h, stdarg.h,stdbool.h etstddefh.
Bib lio theque standard
D an s les section s suivan tes n ous decriron s Ie con ten u de la b ib lio-
theque du C ANSI. L es fon ction s stan dard, les types et les m acros
se nt reg ro up es se lo n le ur fin alite e t le ur ch am p d 'ap plic atio n. C ette
p re sen tatio n p erm et d e tro uv er p lu s fa cilem en t d es fo nctio ns o u d es
m acros m oin s b ien con nues, D an s chaque section , vous trouverezl 'i n fo r rn a ti on n ece s sa ir e a u ne u tilis atio n e ff ic ac e d es p os sib ilite s d ela bibliotheque, L es n ouveaux types de don nees, les n ouvelles fon c-
tion s ou les n ouvelles m acros defin ies dan s I 'A NSI C 99-seron t in di-q ue es p ar u n asterisq ue en tre p aren th ese s (").
F i c hi e rs d 'e n - ts te s ta n d a rd
Fichiers d'en-tete standard
VOL IS tr ou ve re z to us le s p ro to ty pe s d e fo nc tio n, le s m ac ro s e t le s ty pe s
de la bibliotheque ANSI dans un o u p lu sie ur s d es fic hie rs d'en-tete
suivants:
assert.h inttypes.h(') signal.h stdlib.hcomplex.h(') iso646.h(*) stdarg.h string.h
ctype.h limits.h stdbool.h(') tgmoth.h(')
errno.h locale.h stddefh time.h
jenv.h(*) math.h stdint.h(') wchar.h(·)
float.h setjmp.h stdio.h wctype.h(*)
U ne « fo nctio n» sta nd ard p ou va nt au ssi etre im p lan te e so us la fo rm e
d'un e m acro, vos fichiers source n e devron t pas con ten ir un e autre
d ec la ra ti on d e cette fonction une fo is q ue v ou s aurez in du s I e fic hie r
d 'en - te te appropr ie ,
L e tab leau 22 decrit quelques un s des types corn rn un em en t utilises
e t d on ne Ie fic hie r e'en -te te d an s le qu el ils sen t d efin is.
Tableau 22 . Les t yp e s c ommum fmen t utilises
Type Pinalite Pichier
d'en-tete
stddef.h,stdio.hEmployepou r exp rimer l a ta il le d 'u no bje t e n nombre d 'o ct ets (equivalent
e n gene ra l it unsigned int)
Employe pour l es car ac te res codes sur
plusieurs octets, et suffisamentgrand
pour representerles codes de t ou s l es
jeux de caracteres etendus
Un typeen t ie r u t il isepourr epresenter l es car ac te res e tendus , Y
compris la macro WEOF
Emp loye pou r repre sent er la
differencede deux po in teur s(equivalent habituellernent it int)
size t
wchar t stdlib.h,
wchar.h(*)
wint_t(*) wchar.h(*)
stddef.htrdi ff_t
7 2
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 40/68
Entrees-sorties
La bibliotheque ANS I f ou rn it un en sem ble de fonctions de haut nj-
veau perm ettan t d e g erer tou tes so rtes d'en trees-sorties, et les tam -pons correspondants, c om m e d es flu x u nifo rm es d e d on nee s.
P ar ex ern ple, lo rsq u'on o uvre un fich ier, un n ouv eau flux d'en tree-so rtie e st cree , acco rnpagne d'un poin teur vers un fichier, qui est
en fait un p oin teur v ers un e structure de type F I L E con ten an t les
in form ation s sur Ie flu x. C ette in fo rm atio n co mpren d I'ad resse du
~ am po n, I e nombres d'octets qui n 'on t pas encore ete Ius, et d'autres
m fo rm atio ns su r le fic hie r lu i-rn ern e, L e p oin te ur v ers I e f ic hie r se rado ren av an t utilise po ur iden tifier L e fichier dan s to utes k g o pera-tions.
L e d is po sitif d 'a ffic ha ge e st lu i a us si c on sid ere c omm e u n fichier, Au
d em ar ra ge d 'u n p ro gr amm e, tr ois flu x d 'e ntr ee s- so rtie s s on t o uv er tsp ar d ef au lt , a cc ompagn es de s poin teurs su ivan ts : .
s t d i n
l e d is po si ti f d 'e n tr ee s ta n da rd ;
s t d o u t
I e d is po si ti f d e s or ti e s ta n da rd ;
s t d e r r
I e d is po sitif s ta nd ar d d e s or tie p ou r le s m e ss ag es d 'e rre ur,
stdin correspo nd en gen eral au clav ier, stdo utet stderr a l'ecran ; 1 1
rn oin s q u'u ne re direc tio n n 'a it ete e ffec tu ee p ar l'in te rrn ed iaire d e lafo nction freopen ou p ar l'en viron nem en t d am leq uel le p ro gram mese deroule ,
A ucun e structure d e fichier n'est predefinie dan s Ie langage C: toutfichier n'est cense contenir qu'une s ui te d 'o ct et s. L a s tr uc tu re i nt er ne
d'un fichier es t entierernent du ressort du program me qui l'utilise,
T ou tes les o pe ratio ns d e lecture-ecriture s'effecruent a la p o sitio n c ou -
rante du fichier, qui c or re sp o nd 11 l 'emplacement oi; l'on lira (o uecrira) le p roch ain caractere, et qu i est toujo urs en registree d an s 1 3
structure FILE. A l'ouverture d u f ic hie r, la p os itio n du f ich ie r e s t O.E lle e st a u gme n te e d e 1 11la le ctu re a ll it l'ecriture de chaq l ie nouvea ucar ac te re , L 'a cc es d ir ec t a ux d on n ee s d u fic hier est assure au m oy end e fo nc tio ns q ui g eren t la p ositio n co uran te d u fic hie r,
L'ANSI C99 permet aussi l'ecriture dans un fichier de s caracteres dujeu de caracteres etendus, Tout fichier u tilis e p ar le s fonctions d e le c-ture ou d'ecriture sera o ri en te o c te t ou o ri en te c a ra c te re e te n du , Apres
d ' e n t r e e s - s o r t i e s
qu'un fichier a ete ouvert, et avant to u te operation de lecture oud 'ecritu re, ce fichier n 'a au cu ne « orien tatio n» particu liere, Des
qu'une o pera tio n d e lecture-ecriture d'un o cte t e st accornplie sur Ie
f ic hi er , i l devient oriente octe t . S i c et te o pe ra tio n e st un e o pe ratio n d e
i ec tu re -e cr it ur e d 'u n c ar ac te re etendu, I e f ich ie r dev ien t orien te came-
t e re e t endu . Gr:ke it la f on ction fw ide, on peut d ecid er de l'orientationd 'u n fic hie r av an t m em e l'e rn plo i d e la p remie re fo nc tio n d 'a cce s it cef ic hie r. C ette f on ctio n p erme t a us si d 'o bte nir it to ut m om en t l'o rie n-
r at io n d 'u n fichier,
D es caracteres etendus peuvent seuls etre ecrits dans un fichier
o rie nte c ar ac te re e te nd u, L es fo nc tio ns de l ec tu r e-ec ri tu r e co rr e spon -
d an te s e ffe ctu en t u ne c on ve rsio n e ntre le s c ara cte res e te nd u d u ty pe
w ch ar_ t e t l'e nc od ag e m ulti-o cte ts d es c ar ac te re s d u f lux . POUl 't ou tflu x o rien te c ara cte re ete nd u, l'eta t te rn po ra ire d e l'a na ly se d 'u n ca -
ractere mu lti-o cte ts e st m em o ris e d an s un objet du t ype mbs ta te_ t.
Les fo n ct io n s d 'a cc es a u x o ct et s su r un fichier oriente carac te re e tendun e sont pas autorisees de m erne que les fon ctions d'acce aux carac-
te res e te nd us su r u n fic hie r o rie nte o cte t.
T ra ite me ni d es e rre urs p ou r le sfo nc tio ns
d'entrees-sorties
L es erreu rs lo rs d e l'ac ce s it un fichier sont indiquees par la valeurde retour de la fon ction d'acces, Par e xe rn ple , la constante symbo-
liq ue EOF (pour l es f ic hie rs o ri en re s octet) ou W EOF(p our les fichiers
o rien tes caractere eren du ) est reto urn ee lorsqu e la fin du fichier estren contree par un e fon ction de lecture. S i une erreur de lecture aud'ecriture s'est produite, u n d ra pe au d'erreur (error flag) es t posi-
tionne d an s 1 3 stru ctu re F ILE .
E n ou tre, lars d e la lecture ou de l'ecritu re de flux orien tes caractere
eten du , d es erreu ts peuven t surven ir it l'c cc as io n d e la c on ve rs io nen tre les caracteres eten du s de type w char_ t et les caracteres m ulti-o ctets d u flu x. C 'est ce qui se passe si l'u ne des fon ctio ns d e co nver-sion m brtow c ou w crtom b ne retourne pas une valeur autorisee, L a
v a ri ab le g lo b al e d'erreur err no prend dans ce cas la valeur EILSEQ( e rr o r: i ll eg a l s e qu e n ce ; e rr eu r: s equ en c e illegale),
F o nc tio n s g en era le s d'a cc es a ux fic hie rsLes f on ctio ns ,le s m ac ro s e t les constantes symboliques suivantes sont
declarees dans Ie fichier d'en-tete stdio.h. D an s la d es crip tio n ci-
dessous, pj d esig ne I e pointeur v ers le fichier, L es fo nc tio ns d e ty pe
7 4 Entrees-sorties
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 41/68
in t retournent 0 en cas de succes et une valeur autre que 0 si dese rr eu rs su rv ie nn en t.
v o i d e l ea r e r r( F I L E ' p f ) ;
Position ne a 0 les drapeaux d'erreur et de fin de fichier,
i n t f c l o s e ( FILE ' p f ) ;
P er rn e l e f ic hi er .
i n t f e o f ( F I L E ' p f ) ,
. V erifie si la fin du fichier est attein te. Retourne line valeur dif-
feren te de 0 si le drapeau de fin de fichier est position ne, 0 s'iln e I 'e st p as .
i nt f e r r o r ( F I L E * p f ) ;
V erifie si un e erreur s'est produite pen dan t l'acces au fichier,
Retourne une valeur differen te de 0 si Ie drapeau d'erreur estp ositio nn e, 0 s'il n e l'e st p as.
i nt f f l u s h ( F I L E ' p f ) ;
P rovoque l'ecriture dan s Ie fichier de toute don nee presen te
dans Ie tampon du fichier er qui n 'a pas deja ete ecrite, Re-tourne E O F si une erreur survien t, au 0 en cas de succes.
i nt f g e t p o s ( F I L E * p f , f p o s _ t ' p p o s ) ;
D eterm in e la position couran te du fichier et I 'ecrit dan s la va-
riab le poin tee par ppos. L e type de fpos_t est gen eralern en tlong.
F I L E * f o p e n ( const c h a r ' n o m , c on st c ha r ' m o d e ) ;Ou v re le f ic h i er nom en m ode mode. L es c ho ix p os sib le s p ou r le sty pe s d 'a cc es s on t " r" (read, lecture), "a" ( re a d e t w r it e, lecture
e t ec ri tu re ), "w " (wri te , ecriture), "w+" ( w rite e t r ea d , e critu re e t
le ct ur e) , " a" ( appe nd , ajour), et "a+ " (a p pe n d e t re a d, ajout et
lecture). P our les m odes "r" et "a", le fie hie r d oit d eja exister,
Lesmodes "w " et "w+" c re en t u n n ou veau fic h ier, 01.1 b ie n e ff ac e
Ie con ten u d'un fichier existant, L es m odes d'acces b in aire oute xte s on t s pe cifie s e n a jo uta nt t ou b a la c ha in e d e c ara cte redefin issan t Ie m ode. S i aucun de ces deux m odes n 'est precise
Ie fichier est ouvert en mode tex te. 'La longueur max imale du nom d'un fichier est donnee par
l a con st an ce F I L E N A M E MAX .Le nom bre m ax im um de fichiersp ou va nt e tre o uv erts siin liitan em en t est F O P E N MAX .
i nt f s e t p o s ( F I L E · p f , c o n s t f p o s _ t * p p 05 ) ;
A ffe cte la v aleu r p oin te e p al"ppos 1 1l a p os iti on d u f ie hie r.
Ponctions generales d'acces auxfiehiers 7 5
l on g f t el l ( F I L E * p f ) ;
R eto urn e la p ositio n co uran te d u fic hier,
F I L E * f r e o p e n ( c a n s t c h a r * n o m , c on st c ha r ' m o d e , F I L E * p f ) ;
Ferm e et rouvre Ie fiehier nom en m ode mode en utilisan t Ie
p oin te ur d e fie hie r d eja e xis ta nt pf .
i n t f s e e k ( F I L E ' p f , l o n g d e c a l a g e , i n t o r i g i n e ) ;
D eplace la position du fichier de decQlage octets a partir du
d eb ut d u fic hier (si oxiqine = S E E K _ S E T ) , ou ii p artir d e la p osi-
tio n co ura nte d u fich ie r (si origine = S E E K _ C U R ) , ou a partir de
la fin d u fichierfsi origine» S E E K _ E N D ) . Lesconstantes S E E K _ S E T ,
S E E K _ C U R et S E E K _ E N D valen t hab ituellem en t 0,1 et 2 .
v o i d p e r r o r ( c a n s t c h a r * c h o i n e ) ;
V ou s pouvez utiliser perror(), apres qu'un appel de fon ction
system e a retoum e une erreur, pour copier la chaine poin tee
pa r chaine dans stderr, suivie de deux poin ts (:) et du m essaged 'e rr eu r sy st er n e correspondant,
i n t r e m o v e ( c o n s t c h a r * n o m _ d e _ f i c h i e r ) ;
Rend l e f ic hi er nomfichier in disp on ib le so us c e n o m. S i au eu n
autre n om de fichier n 'est lie a c e f ic hie r, i l e st e ff ac e.
i n t r e n a m e ( c o n s t c h a r * a n c i e n _ n o m , c on st c ha r * n o u v e a u _ n o m ) ;
Remplace Ie nom du fichier don t Ie nom est poin te par an-Cien_nom par la chain e poin tee par nouveau_nom.
v o i d r e w i n d ( F HE * p f ) ;D eplace la position du fichier en deb ut de fichier et m et 1 10 lesd rap eau x d 'erreu r er d e fin d e fich ier,
v o i d s e t bu f ( F I L E * p f , c h a r ' t m p ) ;
Definit tmp cornrne I e tam po n d 'e ntre e-s ortie p ou r le f ic hie r. L e
tam pon doit eIre un tab leau don t la taille est ega le a B U F S I Z . Si
tmp e st u n p oin te ur n ul, a lo rs I e f lu x d 'e ntre es -s ortie s n 'u tilis era
p as d e tamp on .
i n t s e t v b u f ( F I L E * p f , c h a r * t m p , i n t m o d e , s i z € _ t t a i l le ) ;
D efin it Ie tab lea u tmp d e lo ng ue ur taille c orn rn e tamp ond 'e ntr ee -s ortie p ou r I e fic hie r. L e p ara m e tr e mode doit etre un ed es c on sta nre s s uiv a n te s: ~ I O F B F ( tam po n d 'e nrre e-s or tie p ou rIe f ich ier complet ), I O L B F ( tampo n d 'e nt re es -s or ti es p ar i ig n e) ,
ou _ I O N B F (p as d e ta mp on d 'en tre e-so rtie ). S i tm p est un poin -teur nul, un tampon de taille taille e st a llo ue d yn arn iq ue -
merit.
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 42/68
76 Entries-sorties
F I L E * t m p f i l e ( v o i d ) ;
O uvre un fichier temporaire en m ode lecture/ecriture binaire,
L e fichier est autorn atiquem en t efface en fin de program me.
Le programme doit pouvoir ouvrir au m oin s T MP M AX fichiers
ternporaires. La e on st an te s ymbol iq ue TMP_MAX es t superieureou egale
a25 .
c h a r * t m p n a m ( c h a r * c h n ) ;
Produit un nom de fichier unique qui pourra etre utilise pour
creer un fichier temporaire, Si e hn est un pointeur n ul, le no m
de fichier p rod uit est stocke dan s un tam pon in terne statique.
e hn doit sinon pointer vers un tab leau de char d'une longueur
au m ain s egale a L_tmpnam oc te ts , d ans lequel la fon etio n ran -gera Ie nouveau n om .
Pon c tio n s d 'e n tre e s- so rtie s p o u r le sfic h ie rs
Les fonct ions usuelles utilisees po ur la lecture et l'ecriture dans un
f ic hi er s on t d ec la re es d an s I e f ic hi er d 'e n- te te stdio.h. Dans I e t ab le au
23, p f designe I e p oin te ur v el'S u n f ic h ie r, Le s f onc ti on s qui n 'ont pasd'arg um en t d e ty pe pointeur ve l'Sun f ich ie r (FIl E) lisent le « fich ier»
stdin (I e p lu s s ou ve nt I e c la vie r) et ecrivent dans Ie « fichier » stdout(le p lu s so u v e nt l'e cra n)
Ecriture e t le c ture de ca ra cte re s e t de chaines
Tableau 23 . L es fo n ctio n s d e le ctu re e t d 'e cr itu re d e c a ra c te re s.
Utilisation
i n t p f u t c ( i n t c, F I L E * p f ) ;
i n t p ~ t c ( i n t c , F I L E *pf );
irrt putchar] i n t c );
i n t f g e t c ( F I L E * p f ) ,
i n t g e t c ( F I L E * p f ) ;
i n t g e t c h a r ( v o i d ) ;
i n t ~ n g e t c ( i n t c, F I L E * p f ) ;
i n t p f u t s ( c o n s t c h a r * c h n , F I LE * p f ) ;
i n t puts{ c o n s t c h a r * c h n ) ;
c h a r * f g e t s ( c h a r * c h n , i n t n , F I L E * p f ) ;
c h a r *gets( char * t a m p o n ) ;
Ponctions
Ecrireun caractere
Lir e u n e ll ractere
Renvoyer un carac te re
Ecr ir e une Ii g n e
Li reune l igne
Pon ct io n s d 'e n tr ee s- so rt ie s p ou r l es fi ch ie rs 77
A chacune de ces fonction s d'entrees-sorties correspond un e fon c-
rion pour un acces sur u n f ic hie r o rie nt e ca rac tere eten du , C es fo nc -
tio ns o rien tees c aractere eten du so nt dec lare es d an s Ie ficn ier d 'e n-
tete wchar.ht"), Leur nom est forme en remplacant le caractere c(comme character) par les caracteres we (cornme wide character, ca -
ractere eten du), o u le cara ctere5
(comme string, chain e) par les ca-racteres 1 ' 1 5 (comme w ide s tr in g , chaine etendue),
P on ctio ns d'e c riture e t de L ec ture de bL oc
Les fonctions d'acces aux f ic h ie rs sui van te s permettent de lire Oll
d 'e crire u n b lo c d e c ara cte re s:
s i z e _ t f w r i t e ( c a n s t v o i d * t m p , s i z e _ t t a i l l e , s i z e _ t n , F I L E * p f ) ;
Bcrit n o bje ts d e lo ng ue ur taille du tampon poin te par tmp
dans Ie fichier,
s i z e _ t f r e a d ( v o i d * t m p , s i z e _ t t a i l l e , s i z e _ t n , F I L E * p f )iL it a u p lu s n o bje ts d e lo n gu eu r taille d u fic hie r e t le s c op ie apar ti r d e l 'emp la cemen t rnernoire po in te p ar tmp.Ces fonctions retoument toutes deux Ie nornbre d'octets trans-
feres, Si la valeur de retour est plus petite que I'argum en t n,
soit un e erreur est surven ue, soit fread a rencon tre la fin du
fichier,
S ortie fo rm a te e
La f on cti on p rin tf delivre Linesort ie formatee:
i n t p r i n t f ( c a n s t c h a r * f o I m a t , . .. I * a r g l , . . . , a r g n * 1 ) ;
Be ri t l a chai n e de formatage pointee pa r format dans Ie flux de
s ortie s ta nd ard , e n re rn pla ca nt le s s pe cific ato ns d e c on ve rs io n
p ar le s v ale urs d e la liste d 'a rg um en ts arqi, ... , argn.
i n t fprintf( F I L E * p f , const char * f o r m a t , . . . ) ;
Identique a prin tf, m ais l'e critu re a lieu d an s Ie fich ier p oin te
pa r pf.
i n t vprintf( c o n s t char *format , va_ l i s t a rg );
Identique a printf, mais u n o bje t de t yp e va_ li s t, i ni ti al is e aum oy en de la m acro va_ start, rem place la liste v ariab le d 'argu -
rnents,
i n t v f p r i n t f ( F I L E *p j , c o n s t c ha r *jo Imat , v a _ l i s t a Ig );
Identique a fp rin tf, I de ntiq ue a printf, rnais un ob jet de typeva list, in itialise au moyen de la macro va_start, rem place
la Tiste variable d'argurnents,
7 8
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 43/68
Entrees-sorties
Toutes les fon ctions prin tf retourn en t le n ornb re de caracteres ecrirs,ou EOF si une erreur es t survenue.
D an s l'ex em ple suivan t, la fonction prin tf est appelee ave c u ne sp e-c if ic at io n de conver si on :
printf( "%+10.2f", sin( 1.2 ) );
En sortie on ob tien t I'affichage de la valeur signee de sin (1 .2), avec
deux ch if fr es apres I e p oi nt d ec ima l, ju sti fie e a dro ite d an s un gab aritde 10 caracteres, (~O.93)
L e form at general des s p ec if ic a ti on s d e c o n ve rs io n em plo yees d an s lesfo nc tion s p rin tf est Ie su ivan t:
%[drape aux) [g abari t] [ . p re c i si on ] sp e c i fi c o te u r
Les dropeaux sont constitues de un ou p lu sie urs d es caracteres +,
~ (espace) ,- , 0 ou #. Leu r s ig ni fi ca ti on e st I a suivante:
+
L e s ig ne p lu s e st p la ce d ev an t le s n orn bre s p os itifs ,
w (espace)
U n esp ace est p lace d ev an t les n om bres po sitifs,
L a s ortie e st justifiee a g au ch e d an s Ie gabarit.
o
Le g ab arit e st rernpli de a de van t le n orn bre.#
D an s la form e «alternee »n ote e a ve c I e c ar ac te re #, l es r eg le s
d e co nversion suiv an tes son t u tilisees: si specif icateur vaut
A ('), a (0), E, e, G , ou g, les nom bres en virgule A ottante son tforrnates avec un poin t decim al. Si specij icateur vaut X , x ,
ou 0, les en tiers codes en hexadecim al sent form ates avec Ie
prefixe o x au le prefixe ox, et les entiers codes en octal avec Ieprefixe o .
qabari t: est un entier positif qui determ ine la longueur du gabaritcccupee par la specification de conversion don nee dan s la chaine deso rtie . S i un sign e rnoins (-) est presen t dan s les drapeaux, l a v a leu r
conver ti e s er a j us ti fi ee a g au ch e d an s I e g ab arit; s in on , e lle s era ju sti-fiee a d roite. L a p ortion de g ab arit ex cede ntaire sera rern plie av ec d ese paces. Si la chain e de sortie est plus lon gue que Ie gab arit, celui-ci
sera agran di autan t que n ecessaire afin d'irnprirner la totalite de lachaine.
Fon ct io n s d 'e n tr ee s- so rt ie s p ou r l es fi ch ie rs 7 9
V ou s po uvez aussi specifier un e etoile (*) com me gabarit. D ans ce
cas, la dimension du gabarit est determ inee par un argumen t sup-
plem en taire de type int, qui precede irn mediatern ent l'argum en t 1 1
c on ve rt ir d an s la l is te d 'a rg ument s,
precision determ in e Ie n ornb re de chiffres apres le poin t decim al
da ns le cas o u I 'o n im prim e des n om bres en v irgu le flottan te, lo rsq uele s pe cif ic at eu r e st f ou e. Si Ie specificateur est g, p r ec i si o n deter-
m in e Ie n om bre de ch iffres sig nificatifs, U n arro ndi est effectu e si n e-
cessaire. P ou r les n om bres en virg ule A ottan te, la v aleur p ar defau lt
de precision est 6 .
D an s le ca s des en tiers, precision indique le nombre m inimum de
chiffres qu i s er on t ir np rime s. A utan t de zeros que necessaire seront
places a gauche du nornbre, Pour les entiers, la valeur par defaut deprec iS ion es t 1.
S i I 'a rg ument a convertir est une chafne , precision indique Ien om bre m ax im um de cara ctere s qu i ap paraitro nt,
sp e c : f icateur e st l e sp ec if ic at eu r d e conver si on . J I p re ci se commen t
l'argument donn e doit etre interprete et converti. Notez qu e sped -
f icateur d oit c orre sp on dre a u v erita ble ty pe d e l'a rg um en t a conver-tir, L es spe cificateu rs d e co nve rsio n p ossib les so nt d on nes d an s I e ta-
bleau 24.
Tab/em; 24 . S p ec if ic a te ur s d e c o n ve rs io n p ou r l es s o rt ie sf orma te e s
Spec. Type des Format de sortie
arguments
d, i in t Decimal
u un Sign ed in t Decimal
0 unsigned in t Octal
x unsigned in t Hexadec ima laveca , b , c , d , e , f
X unsigned in t HexadecimalavecA ,B ,C, 0, E , F
f float/double Nombre en virgulef1ottante,decimal
e, E float/double Notation exponentieile ,decimal
a, A float/double Notation expon enrielle,hexadecim alr')
g , G float/double Nota tionen v i rgu le f lo t tan te ou no tat ion
exponentielle , laplus concisedesdeux.
c c h a r / i n t Un seul caractere
80
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 44/68
Entrees-sorties
Tableau 24 . S p ic if ic a te ur s d e c o n ve rs io n p o ur le s s or ti es fo rm a te e s ( su ite )
Spec. Type de s Form at de sortiearguments
s string La chaine terminee par' \0' ou limitee
au nomb re de caracteres preciseparprecision.
N in t * L e nomb re de c a ra c te r e s im p r im e s
i us q u e -l a e s t s to c k e a I 'endroitprecise.P pointeur t'adresse correspondante,hexadecimal ,
% aucun L e c a ra c t e r e % 'I
La l et tr e 1 peut etre placee devant les specif ica teurs de conve rs io n
c au s pour indiquer un caractere etendu au une chaine de c a ra ts re s
etendus.
L es lettres 1 au 1 1 (* ) p eu ven t etre p la cee s de van t les sp ecifica teu rs
d e conve rs io n d, i,, 0, x et X afin d'indiquer un argum en t de type
lon g ou lon g long(·). De la me rn e r na nie re , h et hh, placees devant
les m em es sp ecifica teu rs d e c on versio n p erm etten t d 'in diq uer u n ar-gum en t de type short au char.
On peut convertir un argumen t de type long doub le en placan t Ie
prefixe L devant les specificateurs d e co nv ersio n f, e, E, g, G, a ou A.
E n outre, les ex ten sion s suivan tes on t ete apportees par le stan dardANS I C99:
• L es n ouveaux specificateurs de conve rs io n A et a permettent
d'irnprimer un nom bre de type doub le en notation exponen-b el le h ex a de cima le (OXh .h hh hP±d a u Oxh . hh hh p±d ).
Cette conve rs io n u ti li se FLOAT _RADIX,generalement defini it 2,comme b ase. S i la precision n 'est pas in diquee, le n orn bre sera
im prim e avec autan t de chiffres apres Ie poin t decim al que n e-cessaires pour une representation exacte.
• Les ar~m en ts de type in tm ax_ t(·) ou uin tm ax_ t(O ) seron tconvertis en placant la lettre j devant les s pe ci fi ca te ur s d econ version d, i, u , 0, x et X . De meme, le type size t sera pre-cise par Ie prefix e z et Ie type ptrdi ff_par Ie prefixe t.
• I I e xis te d es s pe cific ate ur s d e c on ve rs io n p artic ulie rs it utiliserdans la chaine de format de prin tf pour im prim er le s types
Fon ct io n s d 'e n tr ee s- so rt ie s p our I e f ic h ie rs 81
e ntie rs d efin is d an s J e fic hie r d 'e n-te te stdlnt.h(·) (inu6_t au
in t_ le as t3 2_ t, p ar e xe rn ple ). C es s pe cific ate urs d e c on ve rs io n
sent definis comme des macros dans Ie fichier d'en-tete
inttypes.h(*). Les nom s des m acros pour les specif ica teurs de
conve rs io n co rr espondan t it tex tttd , i, u , 0, x e t X c ommen ce nt
p ar P Rld , P RIi, P RIo , P Rlo , P RIu , P RIX .P ar ex em ple, les n om sd es m acro s co rn rn en can t p ar P Rld so nt:
P R l d N P R I d L E A S TN P Rl d F A S TN P Rl d M A X P R I d PT
ou Nest la taille en b its (habituellement 8, 1 6,32 ou 64).
P ar ex ern ple :
i n t m a x _ t i~N T M A X _ M A X ;
printf( "valeur du plus grand entier );
printf(%2o" P R l d M A X "\nn, i);
E ntrie s fo rm a te es
L es fo nctio ns sca nf so nt l'e qu iv alen t e n e ntree d es fo nctio ns p rin tf
d e s ortie forrnatee. Elles permettent de lire un fichier en tenan t
co mp te d'u ne ch ain e d e fo rm at e t d e c on ve rtir l'in fo rm ation o bten ue
en vue d'une affectation it d es v ar ia bl es d u p ro gr amme .
int s c a nf ( c o n s t char * f o r m o t , . . . l * o r g 1 , . . . , o r g n * ! ) ;
Lit descaracteres a p artir d e l'en tree stan dard et sa uv eg a rd e le s
v ale urs c on ve rtie s d an s le s v aria ble s poillties p ar le s p oin te ur s
a rgl, ... , a rgn . L es c ara cte re s I us s on t c on ve rtis s elo n le s s pe cifi-c atio ns d e co nv ersio n de la c hain e d e fo rm at form at.
int f s c a n f ( FILE * p f , c o n s t char * f O I m o t , . . . ) ;
Identique it sca nf, rn ais lit it p ar tir d u fic hie r s pe cifie p ar pf aulieu d e l'entree standard.
i o t v f sc a n f ( F I LE * p f , c o n s t char * f o r m o t , va_list a r g ) ;
Identique it fsca nf, m ais la liste v ariab le d 'arg um en ts e st rem -
placee par un ob jet arg d e ty pe va_l is t qu i a e te i n it ia l is e graceit J a m acro v a_ start (cf. s upra, Lesfonct ions a ve c un n ombre v ari-
ab l e d 'argumen ts ).
i n t v s c a n f ( c a n s t c h a r * f o r m o t , v a _ l i s t a r g ) ;
ldentique a scan f, m ais la Iiste variab le d 'argum en ts est rem -p lac ee p ar u n o bjet arg d e ty pe v a_ list q ui a ete in itialise g rac e
82 Entries-sorties P on ct io n s d 'e n tr ee s- so r ti es p our l es fi ch ie rs 83
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 45/68
a l a m acr o v a_ st ar t (cf supra, L esfo nc tio ns a ve c u n nombre vari-able d'argwnell ts) .
T ou tes les fo nc tio ns sc an f reto urn en t I e n omb re d e c ham ps d 'e ntree
qui ont ete con vertis avec succes, L a valeur de retour sera E OFsi Ie
prem ier cham p d'en tree n e peut pas @ trelu ou converti, ou si 1'011 aa tte in t la f in d u f ic hie r d 'e ntre e,
Le form at g en eral d es sp e cific a tio n s d e c on v ersio n u tilise es d an s lesfo nc tio ns se a n f e st le su iv an t:
%[gabarit}specijicateur
P ar ex em ple :
scanf( " % 5 d " , & var ); 1/ var est de type in t
P ou r c ba qu e s pe c if ic a ti on d e c o n ve rs io n de la chain e d e form at, Ie pro-chain dement d'entree e st lu , c on ve rti, e t a ff ec te a l a v ar ia b le p o in te epa r l'argurnent correspondant, L es c hamp s d 'e ntre e so nt s ep are s p ar
d es c ar ac te re s d 'e sp ac er ne nt ( es pa ce , ta bu la tio n e t n ou ve lle lig ne ).
gabarit p rec ise Ie n om bre m ax im um d e c ara ctere s I t l ir e e t 1 1conve r -
tir o L e p ro ch ain c hamp d 'e ntr ee c omm en ce av e c l e p rem ie r c ar ac te req ui n 'a p as en co re ete traite,
speci [icateur correspon d aux specificateurs de con version des
c ha in e s d e f orm at d es f on c ti on s d e s or ti e, 1 1l 'e x ce pt io n d es d if fe re n ce ssuivantes:
% i est em ploye pour la lecture des entiers codes en decim al,
o ctal o u h ex ad ec im al. L a b as e e st deterrninee p ar Ie p re fix e d un orn bre , c orn rn e p ou r les c on stan tes d an s I e c od e so urc e.
% f c on ve rti l'e ntr ee p ou r l'a ffe cta tio n Ii un e variab le de typeflo at, et % 1f p our un e variab le d e type dou ble.
% c lit le p ro ch ain c ar ac te re , y c orn pr is u n espace, Tous Ie sau tr e s
specificateurs de conversion Iisen t Ie prochain elementd 'e ntre e, e n sa uta nt to us les e sp ac es q ui I e p re ced en t.
% s lit une chaine et ajoute le caractere de fin de chaine' \0 ' ala fin . L e sp ec ific ateu r d e c on versio n p ou r u ne c ha in e, 5, peut@ trerern plac e p ar u ne su ite d e c ara cte re s e ntre c ro ch ets, la liste
d e s c a ra c te re s acceptables (s ca n list). D an s c e ca s, c baq u e c ara c-
te re lu d oit c or re sp on dre a un de ces caracteres, Pa r e x emp !e ,% [1 234567890] perm et de ne lire que des chiffres, La l ec tu rede I'elem en t d'en tree est term in ee au prem ier caractere qu i n e
correspond pas 1 1l'un de ceux de la li ste d es c a ra c te re s a c ce p ta -
bles. S i la l ist» des caracteres acceptables co mm en ce par u n accen t
circonflexe ( A ) , la lec tu re d e l'ele rn en t d 'e ntre e e st term in ee a u
premier caractere d u flu x d 'e ntree q ui correspond Ii l'un de ceux
de Ia l is t« d e s c a ra a e re s a c c ep t a bl es . L e t iret (-) perm et de sp eci-
f ie r u ne s uite d e c ar ac te re s consecutifs, P ar e xe rn ple , la l is t« des
ca ra c te re s a ccep table s [ a- f} e st e qu iv al en te a [abcdef}.
S i d a ns u ne s pe cif ic ar io n d e c on ve rs io n, u ne e to ile (*) e st p la ce e a p re s
I e sig ne p ou rc en t (% ), l'e le me nt d 'en tre e e stlu rnais n 'e st p as a ff ec te
1 1u ne v aria ble . C e c ham p d 'en tre e e st d on e sau te .
T ou t c ara cte re q ui n e p eu t p as e tre in te rp re te se lo n les sp ec ific atio nsde con version m et fin au cham p d'en tree couran t, puis est replace
d an s I e tam po n d'entree, C e c ar ac te re s era a lo rs I e p remie r it etre lu
p ou r le p ro ch ain e le me nt d'entree,
L a chaine de form at peut aussi con ten ir d'autres caracteres qui n e
fon t pas partie d 'u ne sp ecification de con version et n e so nt p as de s
espaces. L es f on ctio ns s ca nf s 'a tte nd en t it re nc on tre r le s c ar ac te re s
c orres po nd an ts d an s Ie flu x d 'e ntree , rnais n e le s c on ve rtiss en t p as,
n i n e le s sa uv eg ard en t. Si des caracteres q ui n e correspo nden t pas
apparaissen t en entree, Ia fonction m et fin I t la lecture du fichier,
Toutefois, Ii un seul caracrere d'espace de Ia ch ain e d e fo rm at co rre-
sp on dra toute suite de n'irnporte que! n om bre d 'esp aces en en tree.
Par exern ple, si la chaine de form at «~% c» est utilisee pour lire uns eu I c ar ac te re , to us le s e s pa ce s I e p re ce da nt s ero nt s au te s.
D e la m em e m an iere qu e po ur prin tf, ) 'AN51 C99 def in it d es s pe ci fi -
c ate urs d e c on ve rsio n p articu lie rs p ou r Ii re d es v ariab les e ntie re s d etaille fix e corn me in t Ieastjz t. L es n om s des m acros co rrespon -d an ce s, d ~fin ie s d an s ie f ichier .d 'en- te te inttypes.h(*), commencent
par s e N (pour «scan ») au lieu de P RI (pou r «print»).
Le f ich ie r d 'en -t et e wchar.h(·) c on tie nt le s d ec la ra tio ns d es f on ctio nsw prin tf, w scan f et d es fo nction s q ui. leur so nt asso ciees. C es fon c-tio ns p erm etten t d es en tre es-so rties se lo n lin e c ha in e d e fo rm at e te n-d ue . L es s pec ifica tio ns d e co nv ersio n e t le ur in te rp re ta tio n o nt id en -tiques a celles des fon cto ns prin tf et scan f.
In te rv al/e d e v a le ur e t p re cis io n d es ty pe s r e e l s jlottants 85
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 46/68
84 i im i te s numer iq u e s
Le s lim ite s numeriqueset la c la ssific a tio n d es n ombre s
L ors qu e l'o n tra va ille a ve c le s d iffe re nts ty pe s n um eriq ue s d u la ng ag eC , il est im portan t de b ien assim iler les in tervalles de valeur de cha-
c un d es ty pe s.
ln te rv alle s de v ale ur de s typ es e ntie rs
L es in te rv alles d e v ale ur d es ty pes enders son t docurnen tes dans Ie
fichier d'en-tete limits.h. Les constantes d on nees d an s Ie tab leau 25
p re cis en t l es valeurs rnaximales et rninirnales qu i peuvent etre repre-
sentees par un type don ne.
Tableau 25 . L es lim ite s d es ty pe s e ntie rs
Type M in imum Maximum Max imum du
type non-signe
char C H A R M I N C H A R M A X U C H A R M A X
signed char S C H A R _ M I N S C H A R M A X
short S H R T M I N S H R T M A X U S H R T M A X
in t I N T _ M I N IT _ M A X U I N T _ M A X
long L O N G M I N L O N G M A X U L O N G M A X
long longr ') L L O N G M I N ( · ) L L O N G M A X ( * ) U L L O N G M A X ( · )
Si char est in terprete comme sign e, CHAR_MIN e st e ga l a SCHAR_MIN
et CHAR_MAX es t egal a SCHAR_MAX. D ans Ie cas contraire, CHA R M IN es tegal a 0 et CHAR_MAX e st e ga l a UCHAR_MAX. -
En c om p leme nt d es c on ta nte s du tableau 25, limits.h con tient :
C H A R B I T
Le nornbre de b its dans un byte (h ab itu eI Ieme nt 8 )
M B L E N M A X
Le nombre m ax im um d'octets dan s un caractere multibyte,
Des constan tes ont aussi ete definies dans le fichier d 'en -tete
stdint.h(*) p ou r p re cise r le s v a le urs m ax im aJ es e t m in im ale s d es ty pe sWCh~I_t , wint:-t, size_t, ptrdiff_t, et sig_< ltom ic_t, et des typesenuers de taille fixe, comme in t least32 t. Les noms de cesco nsta nte s so nt fo rm es a p ar tir d es -n om s d e s types de la rn an iere
suivan te : Ie nom du type est ecrit en capitales et le suffixe _ t est
r e r n p l a c e pa r _ M I N ou _MAX. Pa r e x e m p l e :
l 4 C H A R _ M I N
I N T_ L E A S T3 2 _ M A X
Seules le s con stan tes ' . ,_MAX sont definies pour le s t yp e s un si gn ed,
II v al e u r m i n i m a l e d e w ch ar _t
II V al e u r m a x i m a l e d e i n t _ l e a st 32 _ t
In ie rua lle de va leur e t p re c isio n des typ es
feels j lot tantsLe sma c ro s d u t ab le au 2 6 s on t d ef ir ue s d an s I e f ic hi er d 'e n -t et ej 1 oa t. h.
Elles representent l'intervalle de valeur et la precision des types
float, doub le, et long doub le. Les nom s des m acros son t form es en
u ti li sa nt l es prefixes Fl T p ou r f lo at , DB l p ou r d ou ble et lDBL pour
lo ng d oub le. Le s macros F L T _RADIX et F L T _ R O U N D S s'appliq uen t aux
t ro is t ype s flottants,
Tableau 26 . Ma c r os p o u r l es t yp e sjl ott an ts d a ns jl oa t.h
Macro
FlT RAD IX
F L T R O U N D S
F L T M A N T D IG
DBl_MANT_DIG
L D B L _ M A N T _ D I G
FLT MIN EXP
DBL_MIN_EXP
lDBL.JIIN_EXP
Pinalite
Base de la notat ion exponen ti el le
Precise comment es t effectue l 'arrondi SU I les
valeurs qu i n e p eu ve nt p as e t r e representees
exactement:
-1 " i nd et ermine0= v er sO ,
1 :; a la valeur r ep resen tab le Ia p lus proche2:; v e r s plus I'infini
3 " v e r s m o i n s l'infini
Nombre de chiffres d a n s la rn antisse en ba e
FLT RA DIX
Valeur rninirnale de l'exposant dan s l a b a s e
F L T RADIX
86 L imi te s n umer iqu e s C la ss if ic a ti o n d e s l10mbr e s e n v i rgui ej lo t ta n t e 87
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 47/68
Tableau 26. Ma c ro s p o ur Ie s ty p es jlo tt an rs d a ns jlo a t.h ( su it e)
Macro
V a l e u r maxima le de l'e xp osan t da ns la b ase
F U R A D IX
Finalite
F L T M A X E X P
D B L M A X E X PL D B L M A X E X P
L'intervalle de valeur et la p re cis io n d e tous le s t yp es r ee ls flottants
sont donn es par les m acros du tab leau 26 , En realite, ces in form a-
tion s n e sont Ie plus s ouve n t r eq u is es qu e pour la notation decimate
(base 10). Vous pouvez pa r consequent u ti li se r l es macros se r appe r-
tant au type float decrites dans Ie tab leau 27, et qu i sontdefiniesd a ns I e f ic hi er f/oat.h,
Tableau 27 , Les limites pOln le typef/oot
Macro
Precision e x p ri r n e e e n nornbre d e chifFres a p r e s I e
point decimal
Puiss an ce de 1 0 n e g a t i v e min imale
Puissance d e 10 pos it ive maxima Ie
Plus p e t i t nombre pos iti f e n v i r g u Ie flottanteP lu s g ra nd n o m br e e n v i r g u le A o t l a n t e
P l u s pet it nombre pos it if en v i r g u l e f lo tt an te x t e l
q u e 1.0 + x ! = 1.0
Finalite
F L T _ D I G
F L T _ M I N 1 0 E X P
F lT M A X 1 0 E X P_ _F l T _ M I N
F lT M A X
F L T _ ' E P S I l O N
De s c on sta nte s s ir nil a ire s s on t a us si d ef in ie s p ou r le s ty pe s double et
l o n g d o u b l e , Leur n om co mm en ce par D B L au L D B L au lieu d e F L T .
Dans Ie stan dard ANS I C 99, la macro D E C IM A L D IG indique la pre-
cision , ex prirn ee en n om bres d e chillies ap res ie po in t decim al; d up lu s g ra nd ty pe fio ttan t. .
C la ssific atio n de s n ombre s e n v irgule
jlottante
Cinq categories d e n om bresen virgu le flottan te so nt d efin ies d an s le
sta nd ard AN SI C 99 (v oir ta ble au 2 8 ) . , Une c on sta nte symb oliq ue e st
definie dans Ie f ichier d ' en- tete math. h pour chacun e des categories.
Tableau. 28 . .us c a te g o ri es d e n ombre s en uirguiejlottante
Macro
Nombres e n v ir g u le flottante d o n t l a v a le u r e s t 0
N o m b r e s e n v ir gu le A o t t a n t e e n r e p re s e n t a ti o n
n o r r n a l i s e e
Nombres e n v ir g ul e flottan te en r e p r e s e n t a t i o n
s u b n o r m a l e "
Nombre s en v i r g u l e flo t t a nte representant une v a l e u r
infinie
Pas un n om bre (N ot a N um ber, NAN ): s e q u e n c e de
b it qu i n e re prese nts p as tin nornbre en v i r g u le
flottante v a lide,
Categorie
F P Z E R O
F P N O R M A L
F P _ S U B N O R M A L
F P I N F I N I T E
F P N A N
" Les petits n om bres p eu ve nt ~ tr e r ep re se nt ee en no ta tion subno rr nale.
L e s m acros du tableau 29 pe rme t ten t de classer un nombre reel envirgule f lQ t tan te dans l'une d es c ate go rie s d u ta ble au 28 sans declen-cher d'erreur,
Tableau 29 , L es m ac ro s p o ur 1 0 c la s si fi ca ti on d es n ombr es r ee ls
en virgule f/ottante
Macro
R e te ll m e I 'u n e d e s c on st a n t e s d e c r i t e s c ia ns Ie
ta ble au 28 po ur in diqu er la c ateg orie 1 1la que lle
a pp a r ti e n t x ,
Relou rne «vrai » (I. e., une va l e u r autre que 0) s i la
valeur d e x es t finie (0 , normal, sub normal, n on
in fin le, o u NAN ), sin on o,
Retourne « vrai» si x est in fini, sin on o ,
Resultat
f p c l a s s i f y ( x )
i s f i n i t e ( x )
i S i n f ( x )
88 Ponc t ions math imat iques F o n ctio n s mo th ema tiq ue : p o ur le s ty p es e n tie rs 89
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 48/68
Tableau 29 , Le s ma cr os p o ur la c la ss ific a tio n d e s nombres reels
en ui rgule j lo t tan t e ( su it e )
Macro
Reto urn e « vrai» si la valeu r de x est uri n ombre en
virgule f lottante normalise d i f f e r e r n de o . Retourne
o d a n s t a us l e s a u t r e s c a s .
Retourne « vrai» si x n 'est pa s un nombre (NaN) ,
s in o n o .
R e t o u r n e « vrai » si x e st negatif (i. e ., si I e b it de
signeest poslrionne), sinon o.
Restlltat
isnormalCx)
isnan(x)
signbit(x)
Les const an t es su ivan te s sent dies aussi de . tl n ie s dans l e f ic hi er d 'e n -tete math.h
INF INITY
la valeur rn ax im ale positive du type float, servan t a represen-ter ] 'in fin i ;
NAN (Not A Number, pa s un nornb re )
une valeur de type float qui n 'est pas un nombre e n v ir gu lef10ttante valide.
La constante NANp eu t e tr e p assiv e o u a ctiv e. Si un e constante NAN
active apparait dans l 'evaluation d'un expression arithm etiqu e, Ie
drapeau d'exception FE_INVAL IDde l 'envi ronnernent vi rgule f lo t tan tees t p os itio nn e, C ela ne sera pas le ca s si l'on a affaire a un e co ns ta n teNANpassive,
Le c on ce pt d e constante NANn'est p as o bi igatoire dans l 'implanta t ion
d u la ng ag e C. 5i c e c on ce pt n 'a p as ete retenu, la constante NANne
se ra p as defmie.
Fonctions mathematiques
U ne gran de v arie te de fon ction s m athem atiques son t defin ies dan s Ielan gage C . D es fon ction s differen tes requieren t des types differem s ..
P ar ex em ple , les fon ction s de gen eration de n om bres aleato ires s'ap-
pliquen t sur des en tiers tan dis que les fon ction s trigon orn erriques
s'a pp liq ue nt su r d es fe els e n v ir gu le flo tta nte .
F on ctio ns m athe ma tiq ue s p our le s
ty p es e n tie rs
Les fonct ions mathematiques po ur les typ es in t e t lon g so nt defin ies
d an s I e f ic hie r std/ih.h.
int Iand( void );Cenere un n om bre aleatoire c omp ris e ntr e 0 etRAND MAX . La
constante RAND_MAX es t au moins e ga I e a 32767, c'est-a-dire
215 -1.
void Hand( unsigned n );
I nitia lise Ie g en era te ur d e no rnb re s a le at oi re s a ve c la «gralne»
n. Apres quece tt e fon ction a ele a pp ele e, le s a pp els de ran dt )g e n e ren t une sequence de nom bres a lea to i re s d i ff er ent e de laprecedence.
int abs( lnt x );R etou rn e la valeur absolue de x.
div_t dive int x, int y );
Divise x par y et ra ng e la p artie entiere de la division et son
reste dan s un e structure de type div_t, dent le s m em bres quot
(le quotien t) e t rem (le rest) sont de type in t. Le type di v_test
d efin i d an s Ie fic hie r stdlib.b.
Les fonctions lab s, llab s('), lldiv(O ) et ldiv (correspondant a absan d div), sen t d efin ies po ur les en tiers de type long long(*). En
outre, les fonctions im a xa b s CO )et imaxdi v( ') s on t d ef in ie s pour Ietype in tm ax _ t C O ) . Ces fo nc tio ns sont declarees dans I e fic hie rinttypes.h(·).
Fonc t i on s mathematiques p our le s ty p esreels j lo t tants
Les fonctions marhematiques declarees dans Ie fichier math.hn 'e ta ie n t de fi ni es a I 'o rig i n e q ue p ou r d es v alet! rs d e typ e d ou ble , a vecd es valeurs de re tour et des argum en ts de type doub le. C es fon ction s
sen t p resen te es d an s Ie tab lea u 30 .
90 Fo n c t io n s ma th eman qu e s Optimisa tion 91
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 49/68
T ab le a u 3 0. l..e sjo n ctio n s m iu he ma tiq ue s tra ditio n ne lle s p o ur le s
types double
Fonction mathernatique Fonction C
Fonctions t r i g o n o m e r r i q u e s
s in u s , e o s in u s , t a n g e n t ea r c si n u s , a r c c o s i n u s
a r c t a n g e n t e
F o n c t io n s h y p e rb o li q u e s
Pu issances, racine carre
E x p o n e n r i e l l e s
L o g a r i t h m e s
E n t i e r Iep lus proche
Valeur a b s o l u eR e s t e d e l a d iv is io n
sin, COS, ta nasin,acos
atan,atanl
s in h, c os h, ta nh
pow,sqrt
exp,frexp,ldexp
log,log10
c eil, flo or
fabsfmod
Partie e n t i e r e et pa r t ie r a t io n n e l le modf
D e n ou ve lle s v ersio ns d e s fonctions du tab leau 30 on t e l e definiesp ou r le s ty pe s flo at et long doub le dans l'A N Sr C 99 . Le nom de ces
fonctions finit pa r f ou 1. Par exernple:
d o u b l e ( o s ( d o u b l e x )j
f l o a t ( o s f ( f l o a t x ) ;l o n g d o u b l e c o s l ( l on g d o u b l e x ) ;
Le tableau 31 presente les nouvelles fonctions mathernatiques stan-
dard in trod uites d an s Ie fichier math.h. D es ve rsio ns d e ces f on t i on spour les types float et les long double, don t les nom s finissen t par
f ou 1, ex is te n t au ss i,
Tableau 31 . L es n o uv elle s jo n ctio n s m ath r!m atiq ue s d e J 'A N SI C 9 9
p o ur J es v a / eu rs d o ub le s
Fon ct io n ma th er na ri qu e Ponction C
F o n c ti o n t r i g o n om e t r lq u e s
Fonctions exponentielles
Logarithrnes
Racines
Reste
asinh,acosh,atanh
exp2,expml
ilogb,logb,loglp,log2
cbrt,hypot
remainder,remquo
Tableau 31. us n o uu elle s fo n ctio n s m ath em atiq ue s d e I'A N SI C 9 9
p o ur le s v a le urs d ou ble ( su ite )
Fonction mathematique Fonction C
D i f f e r e n c e positive
Minimum e t maximumArrondi
P r o c h a i n nombre
C o p i e de s i g n e
O p e r a t i o n s o p t im i s e e s
Fonction G a m m a
Fonctionsd'erreur
fdim
fmin,fmaxtrun ~rin ~lrint, llrin t,roun d,lround,llround
nearbyint,nextafter,
nexttoward
copysign
scalbn , scalb ln , fm a
tgamma,lgamma
erf,erfc
D es m acros perm ettant la com paraison de nom bres en virgule flot-
tan te so nt a ussi d efin ies dan s I.e fichier math.h (VO ir I e ta ble au 3 2) .
C on trairem en t au); operateurs de com paraison, ces m acros ne de-
c l e n chen t pa s l'e xc e ption F E _IN VA L ID lo rs qu e l eu rs a rg ument s n e
peuvent f!tre com pares; par ex em ple si l'un d 'en tre eux est un econstante NAN .
Tableau 32 . L es m ac ro s p our /a c om pa ra iso n de s n om bre s e n
virgule j lo ttan te
Macro Comparaison effectuee
i s g r e a t e r ( x , y )
i s g re a t e r e q u a l ( x , y )
isless(x, y li s le s s e q u a li x , y )
i s le s s g r e a t e r ( x , y )
isunordered( x , y )
(xl> (y )
(x) >= (y)
(x l < (y)
(x) <;(y)
(x) < (y) II (x)» (y)
1 si x et y ne p e u v e n t ette c o m p a r e s, s in o n 0
Optimisation
Plusieurs fon crionn alites ont ere intrcduites par Ie stan dard A NS Ie9 9 p ou r o ptim is er l'e ffic ac ite d es o pe ra tio ns e n v irg ule flottante.
92 Fonc t ion s ma thema tiques F o n ctio n s m a th em a tiq ue s p o ur le s ty pe sjlo tta n ts c o mp le xe s 93
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 50/68
Les types float_ t e t double _ t, definis dans math.h, re pre se nte nt le s
typ es u tilise s e n in te rn e p ou r l'arithmetique e n v ir gu le flottante, Au-
cun e co nversio n n 'est n ecessaire avan t qu e les operatio ns arithrn e-
tiq ues n e soien t effectuees lo rsque ces types so nt em ployes dan s un
programme. L a m acro FLT_EVAL_METHOD precise que ls son t les types
de b ase equivalen ts, e t retourne I'une des va leurs decrites dans Ie
tableau 33.
Tableau 33. L e s o p e ra te ur s d es d ec la ra ti on s c om pl ex es
FLT_EVAL_METHOD Type represente Type represente
par float_t par float t
0 float double
1 double double
2 long double long double
L es u nite s c en tra le s p osse de nt so uv en t d es in str uc tio ns p ar tic ulie re
pou r effectuer rapid em en t les op eration s arithrn etiques de b ase . L es
conditions d'erreur e t le s o pe ra tio ns d'arrondi peuvent aussi etre
ignorees, Ce type d'optim isation est m is en action par Ie pragrna
FP_CONTRACT. Par exem ple :
#pragma S To e F P_ CO N T R A C T O N
Le rnerne pragrna rnais avec le «commutateu r» positionne su r OFF
p l u t e t qu e O N e rn p ec he d e te ll es o pt im is ati on s.
En outre , la m acro FP FAST FMA sera definie si la fo ne tio n « mu lti-
plica tio n-ad dition en -virg ule flottan te» fm a ( x , y, Z ), qui re-
toume x*y+z et qui e t plus rapide qu e les operation s de m ultip li-
ca tion et d 'additio n prises separern en t, est im plan ree en tan t q u'in s-
truction speciale. L e S macros FP_FAST _FMAF e t FP_FAST _FMAL in d iq u en t
] 'implantation de s fu nc tio ns fm af et fm al.
Fonc t i on s mathematiques pour le s ty p e s
.flo t ta n t s c omp l e xe sL es fo nctio ns et le s m ac ro s p ou r les typ es flo ttan ts c om ple xe s so nt de-
c la re s d an s le f ic hi er d 'e n -te te compiex.ht'). L es fo nc tio ns d u ta blea u34 prennen t un argument et re tournent une valeur du type doublecomplex.
Tableau 34 . L esfo nc tio ns m aih em atiq ue s p ou r le ty pe do uble c om ple x
Fonct ion mathematique Fonction C
Fonct ions trigonometriques
sinus, c o s i n u s , tangente
arcsinus, arccosinus
a r c t a ng en I e
Fonctions hyperboliques
csin,ccos,ctan
casin,cacoscatan
csinh,ccosh,ctanh,
casinh,cacosh,catanh
cpow,csqrt
cexp
c l o g
conj
Puissances,racinecarree
Fonet ion exponent ie l le
Logari thme
Complexe coniugue
Les fonc tions du tableau 35 prennent un argum ent de type doub le
c omp le x e t retournent un e valeur d e type do ub le
Tableau 35 . Les/OI1CtiOI1S c o mp le xe s d e ty pe d ou ble
Fonct ion mathernatique Fonction C
cabs
cargcreal,cimag
cproj
Valeurabsolue
Argument (phase)Parties reelle et imaginaire
Projec tionsurl a sphe re de Riemann
n e xi st e a us si d es v ers io ns d e ces foncrions po u r les typ es float co mplex
er long double com plex don t Ie nom se terrn ine par f ou L
L es m acro s d efin ies pou r les types com plex es son t in diquees dan s Ie
tableau 36.
Tableau 36 . L es m a cro s p o ur te s ty pe s c o mp le xe s
Macro
_Complex
Le nombre irnaginaire unite, i .e . Ie nombre itel que
i2 = -1, av ec Ie typ e co nst flo at _C om plex
Va le ur d e s ub st itu tio n
complex
_Complex_I
9 4 Fonc t ion s ma thema t iques G e sd o n d es e rr eu rs p o ur le sfo n a ie n s m a th em a tiq ue s 95
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 51/68
Tableau 36 . U s m ac ro s p our le s typ es c am p/e xe s (suite )
Macro
_Imaginary
L e n o m b r e imaginaire unite a v e c I e t y p e const
flo at _ Im ag in ary_ Imagi na ry _ I s i l e c om p il a te u r admet I e t y p e
_ Imag i n ar y , s in o n_Comp lex_ I
V a le ur d e s ub st it ut io n
imaginary
_Imaginary_I
I
L es operation s arithrnetiques irn pliquan t des n om bres com plex es
p e~ ve nt e tre accelerees dans Ie cas ou des depassernents de cap a-
Clt~ (n orn bres trop gran ds ou trop petits) ne risquen t pas de se pro-d uire , L e program m eu r peut sig naler ces o peratio ns «stires» par lepragma:
#pragma S T D C e x _ L IM IT E D _ R A NG E O N
Par defaut, c e p ra gm a es t positicnne it OFF.
M ac ro s g e n e riq u es
Les ma c~ o s d ef in ie s d an s I e f ic hi er tqmath.h p os se de nt u n nomgelli-
rique qUI p ~rme t d 'a pp ele r le s d iff er en te s fo nc tio ns m a th em a tlq ue s
quel que so rt Ie t yp e, r ee l o u c omp le xe , flottant, S i un e fo nc tio n e st
d efin ie p our Ie type reel ~ u a L af ois p ou r le s ty pe s re el e t c or np le xe ,
Ie n om de la macro generique est Ie rneme q ue celui de la v er sio n d ela fo nctio n p ou r Ie ty pe d ou ble (to ute fo is, la fo nc tio n ree lle m od f n epossede p as d e m ac ro generique) ,
Le sma c ro s g en e ri qu es appellenr t ou jo ur s l a f on c ti on c or re sp on d an tau type d es argum en ts. P aT ex em ple :
c o m p l e x l ~. 0 + 2 . 1 * 1 ;
c o s t Z ); II Appelle c c o s ( )
c e i l ( 7 . i l ) ; II A p p e l l e ceillO
L es m acros gen eriqu es son t aussi defin ies pour les fon ction s co m-
plexes q ui n e ~ osse den t ~ as d e fo nc tio n ree lle co rre sp on da nte : c arg ,c on ), c re al, C lm ag , cproj, Ces m a cr os a pp elle nt to ujo ur s la f an ctio ncom plex e co rrespondan te, que l'argum en t soit un nom bre feel env irg ule flo tta nte o u u n n om b re co mp le xe.
G e stio n d es e rre urs p o ur le sfo n ctio n s
mathematiques
te s erreurs son t en prin cipe detectees en consultan t la valeur de
retour d'une fon ction et/ou la variab le g lob ale errn o. L a variab le
e rrn o est d ec laree d e ty pe in t d an s le fic hie r d 'e n-te te errno.h.
L orsqu'un argum en t n 'appartenan t pas au dom aine de defin ition
d 'un e fon ction est passe 1 1 cene fo nc tio n, u ne «e rreu r d e d om ain e»se p r o d u i t . La valeur de la macro E D O M es t a f f e c t e e 1 1 errno. De
la rn erne m an iere, si le resu ltat d 'une fon ction n e peut pas etre re-
presen te par le type de la valeur de retour, il se produ it une €rreur
d'echelle, et Lava leur E R A N G E es t affectee a errno. D ans Ie cas d 'undepassement de capacite (la v aleur d u resultat es t trop g ran de p ou r
le type s p e c i f i e ) , l a fonc tion r e t o u r n e la v aleu r d e la m acro H U G E _ V A L ,
avec le sign e approprie, D ans Ie cas d 'un sous-depassement de ca-
pacite (la v aleur du resultat est trop petite pour le ty pe specifie), lafonction retourne O .
E n com plem en t de HUGE V A L , Ie s tandard ANSI C99 d e f i n i t aussi le s
macros H U G E _V A L F (type float) et H U G E_ V A L L (ty pe lo ng d ou ble ) q u i
seront retournees p ar l es f on c ti on s d es t yp es c or re sp o nd an ts .
E n o utre, le standard ANSI C99 definit le s m a cr os FP I L O G B O et
FP_ILOGBNAN. La fonction i logb( x ) retoume FP_ I L O G B O 51 x es t
egal a o. Si x n 'e st p as un nombre (N ot a N um be r, N aN ), ilogb( x )
retourne la v ale ur d e FP ILOGBNAN.
Enuir on n emen t v ir gu le jlo tta n teLe standard ANSI C 99 a introduit l ' erwironl1ement lJ irgulejlo tta ll te afin
de perrnettre une r ep re se nta tio n p lu s detaillee de s condi ti on s d'er-
r eu rs d an s l 'a rit hr ne ti qu e e n v ir gu le f lo tt an te . T o ut es l es d ec la ra ti on s
concernant l'environnernent virgule flottante sont contenues dansl e f ic hi er s d 'e n -t et e fenv.bt"). Deux v ar ia b le s systerne s on t d ef in ie s
d an s c et environnernenr: l'un e pour les drapeaux de statut, utilisesdan s la gestion des e xc ep tio n s e n o irgu !« jlottante, et l'autre pour les
mod e s d e c o n tti it e, q ui d eterm in era les d ifferen ts com po rtem en ts del'arithrnetique e n v irg ule flo ttan te (la m eth od e d 'arro nd i u tili e e, p arexernple),
U n drapeau de statu t est defin i pour rou te ex ception possib le dansune imp lemen ta ti on cornprenant l es e x ce pt io n s e n v ir gu le f lo tta n te
(v oir Ie ta blea u 3 7).
9 6 Fonct ions maihematiques Eno i ronnemen t u irgul e jl o tt an te 9?
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 52/68
Tabieau s? Le s ma c ro s d ifin ie s p o ur le s e xc e ptio n s e n v fr gu 1e jlo tta n te d an s
fenv.h(")
Macro
Divisionpar 0
Le res" ltat de I'ope ra( ion n ' est pasexac tLeresultar e s t i nMf in i, p ar e x .un e va leu r h e rs du do --
maine de defin it ion de la fonc tion
Depassernent de capacite
Sous-depassement de capacite
Condition d'erreur
F E D IV B Y Z E R O
F E I N E X A C TF E _ I N V A L I D
F E _ O V E R F L O W
F E U N D ER F L O ~
Plusieurs de ces con stantes peuvent H re com bin ees gr:1 ce a un O R
bi t Ii b it (I). L a m ac ro F E _ A L L _ E X C E P T estegale a . un O R b it a . bit de
ro ute s le s c on sta nte s d 'e xc ep tio ne n v irg ule flo tta nte irnplementees,L a variab le sy stem e p ou r L esstatuts d'ex cep tion en v irgu le flottan reest du type fex cept_ t.
L es fo nc tio ns su iv an tes so nt u til ise es p ou r g ere r le s e xce ptio ns e n v ir'
g ule flo tta nte . M is Ii part fetestex cept, ch aqu e fon ctio n retourn e 0
pour indiquer un succeset un e valeur differen re de 0 en cas d'erreur,
L'argumentexcepts indique celie des ex ception s du ta b leau 37 qui estimpliquee,
in t fetestexcept ( in t e xc ep ts ) j
T es te q uelle s e xc ep tio ns e n v irg ule flo tta nre s on t p os itio nn ee s,Les bits de la valeur de retour sont positionnes de rnaniere Ii
c or re sp on dr e a ux e xc ep tio ns a ctu el le rn en t positionnees,
in t fecfearex cept] tn t excep ts )j
E ff ac e l es e x ce pti on s e n v ir gu le flottante,
int +erarseexceptt int exc ep ts );
P os itio nn e le s e xc ep tio ns e n v irg ule flo tta nte s pe cifie es ..
int fegetexceptflag ( fexcept_ t *flagp, int exc ep ts );
S au ve ga rd e le s ta tu t d es e xc ep tio ns s pe cifie es d an s l'o bje t refe -
re nc e p ar flagp ..
int fesetexceptflag( const fexcept_ t *flCl9P, int exc ep ts ) j.
P os itio nn e les sta tu ts d 'e xce ptio n e n fo nc tio n d es d ra pe au x sa u-
vegardes an terieurem en t (par fegetex ceptflag) dans I'objetr ef er en ce p ar jlagp.
Le mod e d e c on tr ble d ete rm in e c er ta in es p ro pr ie te s d e l'a ri thmet iq ue
e n v ir gu le f lo tt an te , y co mp ris la m eth ode d 'arron di u tilisee .
L es co nstan tes sy mb oliq ues d u tab leau 38 on t ete definies Iice t e f fe t,
Tableau 38 . Le c o n t/ vl e d 'a r ro nd i
Operateur Signification
Ar rond iver s la va leur in fe r ieure lap lus proche.
Ar rond iver s la va leur Ia plus proche.
Partie ent iere,
Arrond iver s la va leur super ieure la p lus proche .
F E D O W N W A R D
F iE_ T O N E A R E S T
F E T O W A R D Z E R O
F E U P ~ A R D
Les fonctions int fegetround et fesetround( int round ) per-
m ettent de lire et de changer la m ethode d'arrondi conrante,L es fon ctio ns suivan tes p erm etten t de rn an ipu ler I'envirormement
en virgule flottante com me une seuleentite, L e type fen v_t repre-
sen te J 'en viron nem en t en virgu le flottan te d an s son en tier.
in t feg eten v( fen v_t *envp );
Sauvegarde ['environ nem ent virgule flottan te courant dans
l'ob jet po in te par envp.
int f e s e t e n v ( c 6n s t f e n v t *envp )j
M et en place I'en~ironnement virgule flottante pointe par
e nv p ..
int feholdexcept ( Fenv_t +envp );
Sauvegarde !'environ nernen t virgule flottan tecouran t dan s
l'ob jet poin te par envp, puis efface les drapeaux de statut et
fait passer en mode s an s a rr et (n on -stop m od e), dan s Iequel Ie
tra ite rn en t c on tin ue rn ern e s'il se p ro du it d es e xc ep tio ns.
In t feupdateenvf const f e n v _ t "envp );
M et en place l'environnement virgule flottante pointe par
e n v p , et positionn e les ex ceptions qui l'etaient deja dan s l'en-
vironnernent sauvegarde,
La macr o FE D FL ENV re pre se nts u n p oin teu r v ers l'e nv iro nn em en t
v irg ule -f1 otta nte in sta lJ e a u d em arrsg e d u p ro gramm e. E lle p eu t @ ;treutihsee corn me arg um en t des fon ction s feseten v et feup dateen v.
L 'environnem en t virgule tlottante n 'est pas necessairem ent actifm ern e lo rsq u'il e st implante, I! peut etre activ e par Ie pragm a:
9 8 Cla s si fi c a ti o n d e s c a r a a e re s C la s si fi ca t io n d e s c a r a c te r e s 9 9
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 53/68
#pra~a S T OC F EN V _ A C C ES S O N
et desactive par Ie meme pragma avec Ie « com rn utateur» sur O FF.
La macro math_errhandling, definie dans Ie fichier math.h, permet
de determiner si un programme utilise errno et/ou I'environnementvirgule flottante:
• S i l 'e x p r e s s i o n math_errhandlirtg !I i M A T H _ E R R N O ne v a u t pas 0 ,
la varia bJe d'erreur errno est utilisee.
• S i l 'expression math_errhartdlirtg !I i M A T H _ E R R E X C E P T ne v a u t
pas 0, les erreurs en virgule flottante declenchent les exceptions
definies dans le fichier fenv .h.
Class ification des caracteres
et changem ent de casseUn certain nombre de fonctions permettant de classer et de changer
l a c as se des ca ra ct er es de type char so nt d e fi ni es dans Ie f ic h ie r d 'e n -tete ctype.n . Ces fonctions, dont Ie nom commence par is ... ou
to ... prennent comme argument un caractere dontla valeur est
comprise entre ° et 255, ou la constante EOF.
Les fonctions is ... du tableau 39 testent l'appartenance d'un carac-
tere Ii une categorie specifique, ElJes retournent « vrai» (c'est-a-dire
une valeur non nulle) si Ie caractere est dans la categorie specifiee.
Dans le cas contraire, leur valeur de retour est 0, au «faux ».
Tableau 39. L e sfo n ctio n s p o ur [ a c la s ific a tio n d es c a ra c te re s
Categoric Fonction
Lettre int isalpha( irtt C );
L e t t r e minuscule int islower( int c ) i
Lettre majuscule int'isupper( int c ) i
Chiffre decimal irtt isdigit( irtt c )iC h if f r e h e x a d e c im a I int isxdigit( int c );
Lettre ou chiffredecimal int isalnum( int c );
Carac tere i rnp rimab le int isprirtt( irtt c );
Caractere imprimable autre int isgraph( int c );
qu e l'e spa ce '~ ,
Espace irtt isspace( int c )i
Tableau 39. Les fo na io n: p our 1 0 c la ssi fi ca t io n des ca ra c te re s (sui te )
Categoric Fonction
Signede ponctuation int ispurtct( int c ) ;
Caractere de contr61e int iscntrl( int c );
Espace au tabulation int isblank( int c ) i ( .)horizontale
L'exemple suivant lit un caractere et teste si c'est un chiffre :
i n t c = getchar(); II L i t u n c a r a c t ~ T e
if(isdigit( c ) ) .. .11 chiffre d e c i m a l ?
Les fonctions to ... du tableau 40 perrnettent de convertir les carac-
teres de majuscules en minuscules et v ic e v e rsa .
T ab le a u 4 0. L es o p era te ur s d es d ec la ra tio n s c o mp le xe s
Operateur S i gn i f ic a ti on
irtt tolower( int c )i
int toupper ( int c )j
Majuscule vers minuscule
Minuscule vers majuscule
Les fonctions correspondantes pour les ca ra ct er es e te nd LIS, de type
wchar t, sont definies dans Ie fichier d'en-rete wctype.h(·). Leursnoms sont identiques I t ceux des tableaux 39et 40, mais commencent
par isw ... et tow .... Ces fonctions prennent comme argument un
caractere de type wint _ t dont la valeur est comprise entre 0 et 32767,
au 1 21constante W EOF.
II existe aussi, pour les caracteres etendus.Ia classification et I es f on c -
tions de conversion extensibles, iswct ype et towctra n s. C es fonctions
fournissent des rn oyen s so uples, et propres a 12 1localisation du pro-
gramme, pour tester ou convertir les caracteres etendu . Avant que
I'une de ces fonctions soit employee, Ie critere de test ou l'inforrna-
tion de conversion doivent etre enregistres par un appel aux fonc-
tions wctype ou wtrans:
isw ctype ( w e, wctype ( "lower" ));
towctrans( we, wctrans( "upper" ));
10 0 Gest ion d e s c h ai ne s d e c a ra c te r es Gestiall de s cha ine: de cam cteres WI
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 54/68
Ces a pp els s on t e qu iv ale nts it i sw lowe r (we) j e t to wu pp er( w e) j. Lafonction w etype retourne une valeur de type w ctype _t, e t w etr an sretourne une v aleur de typ e w ctran s _ t.
Les caracteres de type unsigned char, codes sur un seul octet,
peuvent etre convertis dans Ie type w char_ t au m oyen de J a function
b to wc, d ec la re e d an s Ie fic hie r wchar.h(") . L 1 con version in verse est
o pe ree par la fon ction w ctob . S i le c ara cte re n e p eu t p as etre c on ve rti,
ces funct ions retournent E O F ou W E O F .
Toutes ces fonctions tiennent com pte des particularites propres it lalangue de l a loca l isa tion courante (voir Ie chapitre In te ma tio na lisa -
tion, j nfra).
G estion des chaines de caracteres
II n'existe p as , d an s le lan gage C , d e ty pe de base correspondant au xchatn es de caracteres, U ne ch arn e est sirn plem en t co nsideree co mm e
une su ite de caracteres terminee par Ie sym bole de fin de chaine, et
rangee dan s un tab leau de char. U ne chaine de caracteres sera repre--
sen tee p ar un p oin te ur v el's le type char qui poin te sur le premiercaractere de lachalne,
Le s fonctions usuelles de m an ipulation des chatnes sont declareesdans Ie fichier d'en-tete strlnq.h, Celles de ces fonctions q ui m odi-
fien t une chatn e retournent un pointeur sur la chaine m odifiee .. Les
fon ctionsqui perm ettent la recherche d'un caractere ou d'un e sous-chaine retournent un p oin teu r su r la p rem ie re o ccur re n ce rencon-
tree, au un poin teur n ul si la recherche echoue.
char *strcat ( char *de st , . const char *He );
Ajoute la chaine SIC il la fin de dest: Le premier caracrere de
SIC rem place caractere de fin de chatne de src.
char *strchr( const char *cnn, int c );
Trouve la prem iere occu rren ce du caractere c dans la chaine s.
int strcmp( canst char *chnl, const c h a r *chn2 );
Compa re le s ch ain es chm et chn2 , et retourne u ne v ale ur su-perieure, egale , ou inferfenre it 0 pour indiquer si chm . es t
superieure, e ga !e , o u inferieure a chn2. On considere qu'unech ain e d e caracteres es t p lu s g ra nd e qu'une autre si I e c od e dup rem ier caractere differen t dan s cette chatn e est p lus gran d qu e
Ie cod e du caractere co rrespo nd an t dan s l'autre ch ain e.
int strcoll( const char 'chnl, const char *chn2 );
T ran sform e un e copie in tern e des ch ain es chn l et chn2 a l'aidede la fonction s trx frmr), puis compare ces chatnes
1 1 I 'a id e d e s trcmp () e t r eto urn e Ie r e s u l t a t ,
char *,trcpy( char *chlll,const char *clm2 );
Copie chn2 dans Ie tableau de char poi n te par chn l . Ce tableau
doit etre assez g ra nd p ou r co nte nir chn2 e t so n caractere de f nde chaine . \0' .
int strcspn( canst char *chnl, const char ~chn2 );
D eterm in e la lo ng ueur m ax im ale d e la so us-chaln e d e chm qu i
ne contient aucun des caracteres de chn2.
size_tstrlen( canst char *chn );
Retourne la longueur de la chalne pointee par chn . L 1 lon -
gueu r d 'un e ch ain e co rrespo nd au n orn bre d e ca r acte res q u'eJ Ie
contient, ex ceptio n faite d u caractere de fin de ch atn e '\0' .
char *stmcat( char *chnl, const char *cnn2, size_t II );
Ajoute ilia fin de chn l le s n p remie rs c ara cte re s d e chn2 (et le
caractere de fin de ch ain e).
int strncmp( canst char *cnnl, canst char *chn2, size_t II );
C om pare les n p remi er s c ar ac te re s d es c ha in es chm et chn2. La
valeur de retour est la rneme q ue pou r s trcrnp.
char *strncpy( char *dest , const char =src, size_t n );
Copie les n caracteres de src dans Ie tab leau de char dest: Le
caracrere de fin de chaine '\0' n 'e st p as ajoute,
char *strpbrk ( canst char *cnm, canst char ~ehnl );
Trouve dans chn1 I a prem iere o ccu rren ce de n 'im po rte quel
c ar ac te re d e chn2.
char *,trrchr ( const char <cnn, mt c );
Trouve la derniere occurrence du caractere c dans la chaine
ch n . .Le caractere de fin d e c ha tn e '\0' est com pris dans la re -
cherche.
int strspn ( canst char *chnl, canst char *chnl );Determ ine la longueur de la p lu s g ra nd e sous-chaine de cnnt
constrtnee uniq uem en t de caracteres appartenant a cnm.
char *strstr( const char *chnl, const char *chn2 ),
T rouv e la p rem iere occu rren ce d e chl l2 (san s le carac te re de fin'\0') dans chnl .
10 2 G e sti on d es c ha fn e s d e c a ra c te re s Con v e r si o n de s ca ra a er e s mu lt i- o c te t s 10 3
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 55/68
c h a r * s t r t o k ( c h a r *chn l , c a n s t c h a r *chn2 );
S ep are la c ha in e chnl en sous -chaines («t ok e ns ») d el im it ee s
pa r n ' impo rt e quel caractere de chn2.
s i z e t s t r x f r m ( c h a r * c h n 1 , c a n s t c h a r * c h n 2 , s i z e _ t n ) ;
- E ffe ctu e un e tr an sf orma tio n d e chn2 propre a la localisation duprogram me (com me un chan gem en t de casse, pa r ex em ple ) et
co pie Ie resultat d an s le tab leau de ch ar de lon gu eu r n pointe
pa r chnl.
Des fonct ion s sirnilaires po ur les ch atn es de caracteres eten du s sen td ec la re es d an s le fic hie r d 'e n-te te wchar.h(*). L eur n om co mm en ce
par w cs au lieu de str.
Co n v e rsio n s c h ain e s - n ombre s
U ne grande variete de fonction s qui perm etten t un e con version en
n om bre d es p rem ie rs c arac te res d 'u ne c ha in e so nt d efin ie s d an s le fi-chief d'en-tetestdlib.h. L a v ale ur d e re to ur d e la fo nc tio n c orre sp on d
a u n om bre re su ltan t d e la c on ve rsio n.
i n t a t a i ( c a n s t c h a r * c h n ) ;
ln terprete le con ten u d e la chain e c / 1 I 1 comme un nornbre detype in to Les fonctions analogues ato l, aton('), et atof per-
m etten t de convertir une chaine en un nornb re de type long,
lo ng lon g(* ), o u d oub le.
d o u b l e s t r t o d ( c an s t c h a r *chn , c h a r **pp tr );
A Ie r ne rne em ploi que atof, m ais pren d l'adresse d'un poin -teur ch ar com me seco nd arg um en t. S i Ie po in teur ch ar po in te
par pptr n 'est pas N ULL , il sera positionn e sur Ie prem ier ca-ractere (espaces b lan cs de deb ut ex clu s) d e la ch ain e chn qu i
n e fait p as partie d e la sou s-ch ain e represen tan t u n n om bre en
vi rgule f lot tan te .Les fonctions correspondant aUK conversions vers lestypes float et long doub le sont strtof (.) et 5trto ld (').
l o n g s t r t o l ( c o n s t c h a r * c h n , c h a r * 'pp tr , i n t ba se ); ..
Converti un e chaine en un n om bre de type long. L e troisiernepa ra rne tr e co rr espond a Ia base, et peut etre un entier en tre 2et 36, ou O .Si base v au t 0 , la c hain e chn e st in te rp re te e c ornm eun nornb re en base 8 , 1 6, ou 10, selon qu'elle com men ce par0 , O x, ou Pun des chiffres de 1 it 9 . L es fo nc tio ns a na lo gu es p er -mettan t de convertir une chaine en un unsigned long, longlong(") ou unsigned long long(') sont: strtoul('),5trtoll (0), et strtoull (').
L es fon ctio ns strto im ax et strto um ax son t au ssi d eclarees d an s Ie fi-
ch ie r d 'en -t et e inttypes.h(*). E lle s p erme tte nt d e c on ve rtir le s c h iff re sinitiaux d'un e chain e en entiers de ty pe in tm ax _ t et uin tm ax _ t.
Des fonct ion s similaires pour l es c a ra c te re s e te ndus sont definies dans
l e f ich ie r d 'en -t et e wchar.h(·). Leur nom com mence par w cs au lieu
d e s tr.L a fo nc tio n s uiv an te , is su e d e I a fam ille p rin tf, p erm et la c on ve rs io nde va leur s nurneriques e n cha in e s f orm at ee s:
i n t s p r i n t f ( c h ar * c h n, c o ns t c h a r ·fo rm at, ... 1 * 0 1 , . . . , 0 n * / ) ;
C op ie la ch ain e d e fo rm at format d an s I e ta ble au d e c har p oin tepar chn, e n u tilisa nt le s sp ecific atio ns d e c on ve rs io n d e la lis ted'arguments 0 1 , . . .an.
D es v ale urs n urn eriq ue s p eu ve nt a uss i e tre lu es, se lo n u lle c ha in e d efo rm at, 1 1p artir d 'u ne c hatn e :
i n t s s c an f ( c h ar * c h n, c o os t c h a r " fo rm at, ... 1 *( 11 ,... ,a n *! );
L it e t convertit le s d o n ne es is su es d e 5, e t c o pi e l es v al eu rs r es ul -
t an te s a ux adr es se s r ef er en c ee s p a r l a l is te d 'a rg umen ts 0 1 , . . . o n .
Les foncticn s vsprin tf et vsscan f son t analogues aux fonctions
sprin tf et sscan f m ais la liste variab le d'arg um en ts sera rem placeepar un objet de type va _list qui aura ete in itialise 1 1l'aide de la m a-
cro va_start (V oir Le s fo n ctio n s a v ec u n n omb re v a ria ble d 'a rg wn e nts,
supra). Les fon ctions snprin tf et vsn prin tf ecrivent un m axim um
de n caracteres, y c om pris I e c ara cte re d e fin d e c ha in e, d an s I e t ab le aupoin te par chn. Ces fonction s retourn ent Ie nom bre de caracteres
e crits d an s I e t ab le au , s an s co rn pte r le ca ra cte re d e fill d e c ha in e.
L es fo nc tio ns c orr es po nd an te s d 'e ntre es /s ortie s fo rm a te es d e c ha in esp ou r le s c hain es d e ca ra cte res e te nd us so nt d ec lare es d an s Ie fic hie rwChar.h(·). Leur nom com mence par sw au lieu de 5 co mrn e dan s lesfonc ti on s p r eceden te s , Par exemple, swpri n tf .
Co n v e rsio n d e s c a ra c te re s mu lti- oc te ts
Un c ara cte re m ulti-o cte ts p eu t o cc up er p lu s d 'u n o cte t e n rn ern oire .L e n orn bre m ax im um d'o ctets pou van t etre u tilises po ur represen -ter un caractere multi-octets e t donne par la valeur de la m acroMBC U R _ M A X , q ui est d efin ie dan s Ie fichier stdlib.n. C ette v ale ur d e-pen d de la localisation courante, Dan s la lo ca lis atio n p ar d efa ut «C »,M B_ C U R _M A X vaut 1.
104 R ec he rc he e i tr i Ge stio n d e s b lo c s memoire 10 5
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 56/68
Chaque caractere mul ti -o c te ts co rr e spond a e x ac te rn e nt u n c ar ac te redu type w char t, L es fo nc tio ns d e co nv ers io n d es c ara cte re s m ulti-octets sont d ecT ar ee s d a n s I e fichier d'en-tete stdiib.h.
i n t m b l e n ( c a n s t c h a r * c h n , s i z e _ t m a x ) ;
Determine la longueur du caractere multi-o ctets p oin te p ar
chn . L a lo ng ueu r rn ax irn ale d u c arac te re e st p re cisee p ar max .Par consequen t , max n e d oit pas etre p lus gran d q ue M B _ C U R _ M A x '
s i z e_ t w c t o m b ( c ha r * c h n , w c h a r _ t w e ) ;
Convert i t le c ar ac te re e te ndu w c e n r ep re se n ta tio n mu lt i- oc te ts ,
et ecrit Ie caractere m ulti-o ctets resultan t d an s Ie tab leau dechar p oin te p ar chn .
s i z e_ t w cs t o mb s( c ha r * e h n , c o n s t w c h a r _ t * p , s i z e _ t n ) ;
Convert i t le s n premiers c ara cte re s e te nd us p oin te s pa r p en
caracteres multi-o cte ts , e t c op ie Ie resultat dans Ie tab leau de
char p oin te p ar chn .
s i z e _ t m b t o wc ( w c h a r _ t *p , c on st c ha r * c h n , s i z e _ t m a x ) ;
D ete rm in e I e co de d u c ara cte re e ten du co rres po nd an t au c arac -
the m ulti-o ctets de chn, don t la longueur m ax im ale est don -
n ee p ar max , et c op ie Ie re su lta t d an s I a v aria b le d e ty pe w ch ar tp oin te e p ar p. _
s i z e _ t m bs t o w c s ( w c h a r _ t *p , c o n s t c h a r * c h n , s i ze _ t n );
Convertit le s n premiers caracteres mu lt i- oc te ts d e chn d an s J es
caracteres etendus et copie Ie resultat dans le tab leau d e char
p oin te p ar chn .
Des fonctions a na lo gu es , d on t le n om com porte un r s upp le rne n-
taire (pour restartabie), sont aussi dec la ree s dans l e f ichie r wchar.h( ,) ,
Les fonctions « redernarrables» p o ss ed en t u n p ar a me tr e a dd it io n ne l,
u n p oin te ur vers Ie type m bstate_ t, qu i doit po in ter sur un ob jet
decrivant l'etat c ou ra nt d e la c on ve rs io n «caracrere etendu/caractere
multi-octets ». E n outre, la fonction m b sin it(") p erm et d e v erifie r sil'etat d e c on versio n c ou ran t est u n etat d e c on v er si on i nit ia l.
R ech erch e et triL es d eu x fo nctio ns su iv an te s so nt d ec la re es d an s le fic hie r d 'e n-tete
stdlib.h c orn rn e d es u tilita ire s g en era ux d e re ch erc he e t d e tti:
v o i d q s o r t ( vo i d * a , s i z e t n ) s i z e t t o i l l e ,
int (*compare)( c on st v oi d *,c on st v oi d *» ;T ri e I e t ab le au a a ve c I 'a lg or ithm e « qu ic k s ort », L e ta ble au e st
c en se a vo ir n e lem en ts d e ta ille taille.
v o i d * b s e a r c h ( c o n s t v o i d * c l e f , c on st v oi d * a , s i z e _ t n ,
s i z e _ t s i z e , i n t ( * c o m p ar e ) ( c o n s t v o i d * , c o n s t v o i d * ) ) ;
R ec he rc he d an s u n tab lea u trie a I e m ot-cle f p oin te p ar clef ,au m oy en de I'alg orithm e d e recherch e dlcho torn ique, L e ta-
bleau a es t c erise a vo ir n e lem en ts d e taille taitle.
L e d ern ier a rg um en t d e c es fo nc tio ns, compare , est un poin teur sur
une fonction qu i com pare deux elem en ts du tab leau a ..C'est, habi-tuellement, au program meur de definir ce tt e f o n ct io n . Elle a pour
arg um en ts deux poin teu rs sur les elem en ts d e tab leau a cornparer ,C ette fo nctio n do it retou rn er un e valeu r p lu s petite que 0 , egale a 0,au supe ri eu r e
a0 pou r in diqu er si Ie prem ier elem en t est in ferieu r,
egal, ou sup erieu r au secon d. P ar e xernpl e, a fi n d e t ri er ou de recher-
cher dan s un tab leau de float la fonction de com paraison suivan te
p ou rr ai t e tr e s pe cif ie e :
i n t c m p r f l oa t ( const v o i d * pt , c o n s t v o i d * p 2 )
{ f l o a t x ~ * ( f l o a t *)pl,
y ~ * ( f l o a t *)p2;
r e t u r n x c = y 1 ( x < y ? -1 : 0) 1;
G e stio n d es b lo cs memoi r e
Les fo n ct io n s su iv an te s , declarees dans str inq.b, p erm ette nr d e COI11-
p are r, d e fa ir e u ne re ch er ch e o u d 'in itia lis er le s tam po ns :
v o i d * m e m c h r ( c o n s t v o i d * t o m p , i n t c , s i z e _ t n ) ;
R ec he rc he J a p rem ie re o cc ur re nc e d u caractere c dans les n pre-m ie rs o ctets d u ta mp on tamp.
v o i d * m e m c m p ( c o n s t v o i d * c h n l , c on st v oi d * c h n 2 , s i z e _ t n ) ;
C om pare le s n p re mie rs o cte ts d u tam po n chnl <lUX o ct ets c or -re sp on da nts d u tam po n c n n z . Lav a le ur d e r et ou r- es t i nf er ie ur e,e ga le , o u s up er ie ur e a ° selo n q ue chnt e st in fe rie ur, e ga l, o u
su pe rieu r 1 1chn2.
v oi d * me mc py ( v oi d +des t, c on st v oi d * s r c , s i z e t n );
Copie n o cte ts d u tam po n src v ers le tam po n dest.
10 6 G e siio n d yn amiq ue d e fa m em o ir e D ate e t h eu re 107
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 57/68
v o i d * m e , l M Io v e v o i d = de st , c o n s t v o i d *SIC, s i z e _ t n );
Copie n o cte ts d u ta mp on sr c vers le tampon dest . Si l es t am -p on s se ch ev au ch en t, c ha qu e c ara cte re e st lu av an t q u'u n au tre
caractere n e soit ecrit au meme emplacement.
v oi d * me ms et ( v o i d * de s t , i n t c , s i z e _ t n ) ;
R emp lit le s n p rem ie rs o cte ts d u tam po n dest avec I e c a ra c te rec.
te s fon ctions correspon dan tes w mem.. de gestion des tam pon s de
caracteres eten dus de typ e w eh ar t, sont declarees d an s Ie fichierwchur.h(·). _
Gest ion dynamique de Lamemoire
Afin de ge re r e ff ic a ce rne n t de la mernoire , il est im portan t qu 'u n
p ro gram m e so it capab le, au co urs de son ex ecution , d 'allouer et d e
lib ere r d yn am iq ue rn en t d es b lo cs m em oire . L es fo nc tio ns d e g es tio n
dynam ique de la m em oire son t declarees dans Ie fichier d 'en -tete
stdlib.h.
En cas de succes, l'app el de l'un e des fo nction s d 'allocatio n de m e-
moire retourne I'adresse de debut d 'un b loc mernoire de la taille
requise. La valeur de retour est du type poin teur sur void. Le pro-gramme p eu t a lo rs utiliser comrne bon lu i sem ble Ie b loc allow ;'.L orsque u n b loc rnemoire n 'est p lu s u tilise , il d oit e tre libere, Tous
l es b l oc s alloues d y nam iq u emen t s on t l ib e re s a ut oma ti qu eme n t lors-q u'u n p ro gr amm e se termine.
v oi d * ma l l o c ( s i z e _ t t ai l le ) ;
A lloue un b loc m em oire de taille octets.
v oi d * ca l l o c ( s i z e t n , s i z e t t a i l l e ) ;
Alloue assez_de memo ire pour con ten ir un tab leau de n ele-
m en ts, ay an t c ha cu n la ta llle taille, e t in itia lis e c ha qu e o cte t
a ve c la v al eu r O.
v oi d * re al l o c ( v o i d * p t r , s i z e t n ) ;
Change la lon gueur du b lo c m e-m oire p oin te par ptr pour lan o uv el le l on g ue ur n . Si le bloc rnernoire d oit e tr e d e-p la ce afind e p ou vo ir p ren dre la n ou velle ta il I e, so n contenu c ou ra n t s er aautornatiquernent copie a u n ou ve l em pla cem en t.
v o i d f r e e ( v o i d * p t r ) ;
L ib ere Ie b loc m ern oire p oin te par ptr.
L 'e xe rn ple s uiv an t u tilis e m a llo e p ou r a llo ue r d e l'e sp ac e a u n t ab le aude 1000 entiers:
II A l l o u e l ' e s pa ce p o u r 1000 e n t i e r s :
i n t * t a b _ en t i e I s = ( i n t * ) m a l l o c ( 1000 * s i z e o f ( i n t ) ) ;
Ces f on ctio ns p eu ve nt e tr e a pp ele es a ussi s ou ve nt q ue necessaire, et
dans n 'im porte quel ordre. Les poin teurs passes II r ealloc ou freed o iv en t f ai re r ef er en c e II un b loc mernoire qui a ete allou e dyna rn i -
quernent .
Date et heure
La bibliotheque d e l'A N SI C cornprend un e nse mb le d e fo nctio ns
permettant d e d eterm in er la d ate et I'heure courantes, de convertir
le s in fo rm a tio ns d e d ate et hem e, et de generer d es ch ain es d e carac-
te re s fo rm ate es p ou r la d ate e t l'h eu re , C es fo nc tio ns so nt d ec laree sdans I e f ic h ie r d 'e n -t et e time.h.
Le s p r in c ip al es f on c ti on s p o ur d et erm in e r l'heure c ou ra n te s on t:
c l o c k t c l a c k ( v o i d ) ;_R eto urn e Ie tem ps m achin e utilise par le programme ju qu'a
p re se nt, a ve c le ty pe c 1o ck _ t (h ab itu elle me nt eq uiv ale nt along). Le resultat peut H re converti en secondes au m oyen
d 'u ne d ivision par la constante C L O C K S _ P E R _ S E C .
t i m e t t i m e ( t i m e t * p S e c ) ;_ R etou rn e le-nombre de s ec onde s e c ou le e s d ep uis u ne d ate d on -
nee (hab itue llemen t le Ier janvier 1970 a 00:00:00). Si Ie poin-teur pSec n 'e st p as NULL, le r es ulta ts er a c op ie a l 'emplacementp oin te . L e ty pe tim e _t e st g en era lem en t defini comrne long.
Les fonc tions permettant la c on ve rs io n e t le f orm a ta ge d e la date et
de Iheure sont:
d o u b l e d i f f t i m e ( t i m e _ t t l , t i m e _ t to );Retourne le n om b re d e se co nd es e ntre to an d tr.
s t ru ct t m * gm t i m e ( c a n s t t i m e _ t * p S e c )i
Retourne un pointeur vers l'heure GMT (G reenw ich M eanT ime) con st ru it e cornme un e structure de type struct tm , a vec
des m em bre de type i n t pour les secondes, minutes, heures,
jour, etc.
10 8 D a te e t h eu re COll t ro le de p ro cessus 10 9
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 58/68
struct tm 'localtime( can st time_t * pS e c ) ;
Identique a gmtime, m ais retourn e l'heure locale pluto t queI 'heureGMT.
char *ctim e( can st tim e_t * p S e c ) ;
char *asctim e ( const struct tm ' p t m ) ;
size_t s t r f t i m e ( c h a r * d e s t , size_t t a i l l e m a x , canst c h a r ' format,
canst struct tm * p t m ) ;
Ces fon ctions generen t un e chain e representan t l'heure et la
date courantes, strftim e accepte une chaine de form at pourc cn tro le r le fo rm at d e so rtie .
La fonc ti on wcsftime correspond a un e version d e strftime po ur lesc hain es d e c ara ctere s e ten du es , E lle e st d ec lare e d an s I e fic hie r d 'e n-t~te wchar.h(*).
L a fig ure 6 illu stre I'u tilisa tio n d es fo nc tio ns d ate et h eu re ,
jSysteme.cl ockf ) I te~ CPU utilise ~
time()
Type Ar ilhm.localtime()
S e c o n d e
time tgmtimeO
M i n u t e
( s e c o n d e s ) H e u l e
mktimeO J o u r d u m o i s
Chainectime()
M o i s
r D a te e t h eu rel~ asctimeOA n ne e d e p u is 1 90 0
strime()J o u r d e I s s em a i n e
t Par e xempie : S un Ju l18 16: 12 :302003 J o u r d e I ' a n n e e
D r a p e a u h e u Ie d'ete
Figure 6. U t il is ati on d es fo n c ti on s d at e e t h e ur e.
Contrb le de processus
O n ap pelle processu s u n p ro gram me en co urs d'execution. Les at tr i -
b u ts p ro p re s a u n p ro ce ss us v arie nt s elo n I e s ys te rn e d 'e xp lo ita tic n.P ou r c ette ra iso n, le s fo nc tio ns d e c on tr6 le d e p ro ce ss us so nt d ep en -
d an te s d u systerne s ur le qu el tourne I e p rog r amme .
Communicat ion a ve c ie syste me
d'exploitation
Env ironnemen tDans le s systernes d'exploitation com me U nix ou W indow s,
ch aq ue p ro ce ssu s e st dernarre dans un environnement repre-sente par une liste de chaines de caracteres de la form e N O M
~ V A L E UR . Ces va ri ab l es d'environnement peuvent € tr e lu es a
l'a id e d e la fo nc tio n g ete nv .Appeis systeme .
La fonction system a pp elle l'in te rp re te u r d e c om rn an de d u sy s-
te rn e, e t lu i tra ns me t u ne c omm an de.
Fin du programme
Un p ro gramm e C s e t erm in e norma lemen t par un appel a lafonction exi t, o u b ie n p ar u ne in stru ctio n return dans la fonc-tion main . Lots d'une f in n o rm a le , Ies ac ti on s su ivan te s sont
e ffe ctu ee s :
1. Tout es l es f on c ti on s installees par atex i t son t executees;2 . Le s tam po ns d'en trees/sorties son t vid es et les fichiers
sont ferrnes;
3. Les f ic h i er s c re es pa r tm pfile sen t effaces.D 'autre part, la fonction abort, met fin a un programme Cs an s e ff ec tu er le s a ctio ns q ue DOUS v en on s de voir. E lle p ro d u i t
toutefois un m essage d'erreur an noncant que le program me aete interrornpu,L a f on ctio n e xi t p eu t e tr e a pp ele e a ve c cornrne a rg um e nt l'u ne
des constan tes E X I T F A I L U RE ou E X I T S U C C E S S , d ef in ie s d an s I efichier stdlib.h. A in si Ie program me peut in form er ses proce -sus paren ts de son «succes» ou de son «echec ».
T ou te s le s f on ctio ns d ec rites d an s c ette se ctio n so nt d ec lare es d an s I ef ichier d ' en- tete stdlib.h.
1 1 0 Co n tr a le d e p r oc e ss us S au ts /lo n lo c au x 1 1 7
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 59/68
Signaux
L orsq u'u n ev en ern en t ex cep tio nn el se p rod uit, le syste me d 'e xplo ita -
tion peut envoyer un signal aux processus. Ceci peut arriver dans le
cas d'une erreur grave , line erreur d'adressage par exem ple, au lors-
qu'une interruption materielle survient. Les sign aux peuvent aussi
e tr e de cl enc hes a la con sole par l'utilisateur, ou par le programmelui-m ern e, au m oyen de la fon ction ra ise. Les f onction s et Ies m acros
perrn ettan t de traiter Ies sign aux son t declarees dan s le fichier d'en -
tete signal.h.
C haque type de sign al est designe par un nurnero constant et identi-
fie par une m acro. VOUS tro uv ere z d an s Ie tab leau 41 ce rtain s d e c es
s ignaux:
Tableau 41 . L es m a cro s d e sig na ux d ufic hie r sig na l.h
Numero du
signal
S J G A B R T
S I G F P E
S I G I L L
S I G I N T
S I G S E G V
S I G T E R M
Signification
Abor t: fin a n o r m a l e du p rog ramme , t e ll e c e l l e occasion-
n e e p ar la fonet ion abort .
Exception vi rgule f lo t tan te : o c c a s i o n n e e p ar lin d e p a s -
s e r n e n t de c a p a c i t e une d iv is io n p ar 0 , ou r o u t e autre
e r re u r de l ' u n i t e de c a l c u l en virgule f lottante ( F P U ) .
Instruction i l l e g a l e : l ine inst ruc tion non v a l id e a et e r e n -
c on t r e e d a n s I e code m a c b in e ,I nte rr up tio n : Ac tio n d e la to uc he d 'in te rr up tio n ( e. g .,Ctrl-C),
Viol at ion de l a s egmen ta ti on : Ac ce s i nva li de a la m e-moire .
Te rmi ner : Une requet e pOll rt erm ine r I e p rog ramme ( en
Un ix , I e s ignal s t andard s igna l e nvoyepa r l acorn rnande
kill).
D 'a utres sig nau x p eu ven t e tre d efin is se lo n le systerne d'exploitation,
int raise ( int 5ig );
E nv oie I e sig na l sig au program me qui a appele la fonetion .
v o i d ( *signal( int s i g , v o i d ( * f o n c ) ( int » ) ( int );
Precise la reponse du program me 1 1un signal dont le num ero
es t sig. L e d eux iem e argum en t,fon c, iden tifie Ie tra item en t as-
socie au signal. Cela peut €tre un pointeur sur une fonction ,
ou l'une de s constantes suivantes:
• S I G D F L E xe cu te Ie traiternent pa r d e f a u t du s ig n al .
• S I G IG N Ignore le signal.
Le traitement par defaut du signal met fin au program me. En
ca s d'echec, signal retourne l a va le u r S I G _ E R R .
Le fichier d'en-tete signal.h definit aussi I e t ype eritier sig_3tomic_t.
Ce type est utilise pour les ob je ts statiques auxquels peut acceder Ietraiternent d 'u n sig na l d'interruption materiel.
Sa uts n on lo ca ux
Le s s au ts l o c a u x , o u sa uts in te rn es 1 1 u ne fo nc tio n, so nt e ffe ctu es Ii
I 'a id e d e l'instruction goto. La m acro setjm p, par ailleurs, m arque un
e mp lac em en t d an s Ie p ro gramm e (e n sa uv eg ard an t les in fo rm atio ns
pertin en tes sur Ie processus en COUl-S) afin que l'ex ecution puisse re-
prendre Ii c et e nd ro it 1 1 n ' i m p o r t e quel moment par un appel 1 1 la
fonction lon gjm p. La fon ction lon gjm p et la m acro setjmp sont de-
c la re es d an s le fic hie r d 'e n-te te setjmp.h.
int setjmp( jmp buf en v );
Sauvegarde I'en viron nem en t appeJant couran t (les regisrres
CPU et la pile) dan s Ie tam pon env , q ui est d e typ e jm p_ bu f.
voidlongjmp( jmp_buf
e n v , int vo lre t );R estitue l'en viron nem en t sauvegarde, afin que I'ex ecution du
p ro gr amme r ep re nn e a l'endroit ou setjm p a ete appelee,
L e p rogramme peut utiliser la valeur de re tour de setjm p pour deter-
m in er si setjm p elle-m ern e a ete appelee ou si un saut a c et en dro it a um oyen de longjm p vient juste de se produire. setjm p elle-meme re -
to urn e Ia v ale ur 0, rn ais ap res u n a pp el 1 1lo ng jm p la v aleu r d e reto ur
apparente de setjm p est la valeur de l'a rgum ent valret. Si valretvaut 0, la valeur de retour asscciee vaut 1.
G e stio n de s e rre urs p o ur le sfo nc tio nssystetneSi une erreur systerne survien t au cours de I'appel d'une fonctionsysterne, un code d'erreur approprie est affecte a la v ar ia bl e g lo ba led 'e rreu r errn o. L es tro is fo nctio ns su iv an te s fou rn isse nt les m essa gesd'erreur systerne correspondant:
112 in ternationalisa tion ln temationalisa tion 113
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 60/68
v o i d p e r r o r ( c a n s t c h a r ' ch o ! n e ) ;
De c la r i d a n s s td io .i IEcrit le texte poin te par ci lafne, su iv i d u m essag e d 'e rreu r sy s-
terne co rresponden t a la valeur couran te de errn o, dan s le fluxd 'e rr eu r s ta nda rd .
c h a r * s t re r r o r ( i nt e r r n u m )i
b ic /a r e d a ns s tr in g .hR etourn e un poin teur sur le m essage d'erreur system e corres-
pondant it errnum. L a valeur de errnum est habituellement ob-
tenue 1 1 p artir d e la v ar ia bl e e rr no . L e s d eu x in str uc tio ns s ui-
van tes don nen t la m em e sortie:perror( " OP E N" ) ;
fprintf( stderr, " O P E N : % s \ n " , s t r e r r o r ( e r r n o ) ) ;
v o i d a s s e r t ( i n t e x p re s s i o n ) ;
D ic la ri d an s a ss err hCette m a cro te ste l'e xp re ssio n sc ala i re expression . S i I e r es ul ra t
vaut 0, ou «faux », assert ecrit l'ex pression , Ie n om de la fon c-
tion , le nom du fichier, et Ie num ero de ligne dans Ie flux d'er-
reu r stan dard , pu is in te rro mp t I e p ro gramm e .. 5i l'ex pressio nes t "vraie" (i.e ., d iff ere nte d e 0 ), a uc un e a ctio n n 'e st e ntre pris e
et le program me se poursuit, 5 i la m acro N D E B U G e st d ef in ie , l es
ap pels 1 1a sse rt n 'au ro nt au cu n effe t.
IntemationalisationL e stan dard A NSI perm et le developpem en t de program mes en Ian -"age C adaptables aux usages propres d 'une langue ou d'un pays,
~ omme, p ar e xemp le , I e f o rm ata ge d es c ha in es rn on eta ir es , L a b ib lio -
theque de I'A NSI C fourn it aussi deux fon ction s, le type leon v, et desm acro s p our traiter le s p ro ble mes d e lo ca lisatio n. C es elem en ts so nt
d ec la re s d an s I e f ic hi er d 'e n- te te loeale.h
Tous les program me com mencen t avec la localisation «C » par de-
[aut, qui n e com pren d aucun e in form ation propre it une langue ou
un pays. A u cours de son ex ecuti on , Ie program me peu t passer it u nea utre lo ca lis atio n e t recuperer le s i nf ormati on s p ro pr es a ce tte loca l i-sa tio n. E ta nt d on ne q ue la p lu part de s a pp lic atio ns n e re qu ie ren t p as
la to ta lite de s in fo rm atio ns d e lo ca lisa tio n, ce s in fo rm atio ns o nt e te
c lassees en ca teg ories, co mm e v ou s p ou vez Ie v oir a u ta ble au 4 2
Tableau 42 . Le s c a te g o ri e s d e l o ca l is a ti o n
Categoric P artie de la lo ca lisa tio n c on cern ee
L a l oc a li s a ti o n e n r i e r e , y c o rn p ri s t o u t e s le s c a te g or ie s c i-
d e s s o u s
Seules les fonctionsstrcoll et 5trxfrmF on ctio ns po ur le traitern en t des caracteres, c o r n m e
i s a l p h a et lesfonctions multi-octets
t es i nf orma ti on s s ur I e f orma ta ge mone ta ir e r et ou rnee
parloealeconv
Le separateur dec imal u t il ise par les fonctions d'en-
trees/sortieset de conversion de cha ine , e t le formatage
d e s i nfo rm atio ns n umeriq ue s n on mon eta ir es, c omme
cellesre tournees par Ioca leconv
Porrnatage des informationsde date e t h eu re it l 'a ide destrftime
L C A L L
L C C O L L A T EL C C TY P E
L C M O N E T A R Y
L C _ N U M E R I C
L C T I M E
le s fo nc tio ns su iva ntes so nt u tilisees p ou r ad ap te r u n p ro gra mm e it
u ne lo ca lis atio n s pe cifiq ue :
c ha r * se tl o c al e ( i n t c a t 8 g o r i e , c an st c ha r * n o m ) ;
L'argument caieqorie correspond 1 1 l'u ne d es co nstan tes sy m-
boliques decrites dans Ie tableau 42, et n o m poin te sur une
c ha ln e q ui id en tifie la lo ca lisa tio n d es ire e p ou r la c ate go rie s pe -
c ifie e, L a c ha in e n om d oit a vo ir a u m o in s le s v a le ur s s uiv an te s:
"("
L a lo ca lis atio n p ar d efa ut, s an s s pe cific atio n p ro pre it u n p ay s.
L a lo ca lis atio n n ativ e d u cornpilateur,
NULL
setlocaleO n 'apporte aucun changem en t, mais retourne Ie
nom de la localisation couran te. Ce nom pourra eIre passe
c omm e arg um en t a setlocale pour retab lir la localisationa pres q u'e lle a ura ete ch an g ee.
L es g ro up es d e fo nc tio ns sta nd ard su iv an ts fon t u sa ge d es in fo rm a-ti on s d e l oc al is ati on : e n tr ee s/ so rt ie s f or rn at ee s, c la ss if ic at io n d es c a -ra cte re s e t c ha ng em en t d e c as se , g es tio n d es c ara cte re s m ulti-o cte ts ,gestion des chaines de caracteres m ulti-octets, et conversionchaine/valeur nurnerique,
114 ln temat ional is tuion lntemat ional isat ion 11 5
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 61/68
Les fonctions suivantes perrnettent d'obtenir des informations ~our
Ie forrnatage des chaines numeriques, comme Ie separateur decimal
et Ie symbole moneta ire :
s t r u c t l c o nv * l o c a l e c o n v( void );
Remplit une structure de type struct l c o n v avec les valeurs
definies par la localisation courante. L'ensemble des rnernbresde cette structure doit au moins comprendre les membres de
l'exemple ci-dessous. Les valeurs donnees entre parentheses cor-
respondent a la localisation pour la Suisse:
s t ru c t I c o n v {
/1 I n f or ma t i o n p o u r l e s v al e u rs n um e ri q u es n o n m o ne t a i r e s
c h a r * d e c i ma l p o i nt ; / / L e s e p a r a t eu r d e c i m a l_ /1 (". ")
c h ar * t h ou s an d s_ s e p ; /1 L e c ar a ct ~ r e e mp l o y e p ou r
1/ r e g r o u p e r l e s c h i f f r e s q l a
I I g au c h e d u s e pa r at e u r d e ci m a l
1 / (" ,")
c h a r * g ro u p i n g ; I I N o m b r e d e c hi f f r e d a n s c h a q u e
I I g r o u p e ( " \ 3" )
I I I n f or ma t i o n l e s v a l e u rs m o n et a i r e s :
c ha r * i n t c u rr s y m b o l ; /1 l e s t ro i s l e t t r e s p o u r_ _ I l i a m o n n a i e l oc a l e e n I S O
I I 4 2 1 7 , a v e c u n c a r a c t ~ r e d e
I I s e p a r a t i o n ("(HF ..)
c h a r * c u rr en c y_ ,y m bo l ; / / L e s y m bo l e m on e t a i r e
I I l o c a l ( " S Fr s . " )c h ar * m on _ de c i ma l _ p o i n t ; 1/ L e s e p a r at e u r d e c i m a l
/1 p o u r l e s c ha i n e s m on e t a i r e s
1/ (".")
c h a r * m o n _ t h o u sa n d s _ s e p ; 1/ L e c ar a ct ~ r e e mp l o y e p o u r
I I r e g ro u pe r l e s c h i ff re , ~
I l i a g a u c h e d u s e p a r at e u r
I I d ec i m a l ( . . ..
c h ar * m on _ g r o up i n g ; I I L e n o m b r e d e ( h i f f r e s d a n s
I I c ha qu e g ro up e ( " \ 3 " )
c h ar * p o s i t i v e _ s i g n ; I I L e s i g n e p o u r I e ,
I I c h a i n e s m o n e t a i r e s
I I p o s i t i ve s ( " " )
c h ar * n e g a t i v e _ s i g n ; I I L e s i g n e p o u r l e s
I I c h a i ne s m on e t a i r es
I I p o s i t i ve s ( " C " )
c h ar i n t _ fr a c_ d i gi t s ; I I L e n o m b r e d e c hi f f r e s a p r ~ s
I I l e p o i n t d e c i m a l d a n s I e
I I f o rm a t i n t e r n a t i o n a l (2)
c h ar f r ae _ d i g i t s ; I I L e n o m b r e d e c h i f f r e s a p r e s l e
I I p o i nt d e c i m a l d a n s I e
I I f o r ma t l o c a l (2 )
c h ar p _ c s_ p r e c ed e s; 1/ P o ur I es v a l e u rs p os i t i v es
I I o u n u l l e s :
I I I e s y m b o l e m o n e t a i r e e s t
I I 1 = a va n t I e m on t a n t ,
I I 0 : a pr ~ s I e m on t a n t (1)
c h ar p _ s e p _ b y _ s p a c e ; I I P o u r l e s v a l e u rs p os i t i v e s
I I o u n ul l es :
I I I e s y m b ol e m o n e t ai r e e s t
I I 1 = avant,
110 - a p r~ s I e m o n t a n t (1)
c h ar n _ c s _ p r e ce d es ; 1/ P o u r I es v al e u rs n eg a t i v e s
/1 I e s y m bo l e m o n et a i r e e st
I I 1 - a v a n t ,
I I 0 = a p r~ s I e m o nt a n t (1)c h ar n _ se p _ b y_ s p a c e ; I I P o ur l e s v al e u rs n e g a t i v es
I I 1- e s p a c e , 0 : p a s d ' e s p a c e
I I e nt r e I e s y m b o l e
I I m o n e t a i re e t l e m o n t a n t ( 0 )
c h ar p _ s i g n _p o sn ; /1 P o s i t i o n d u s i g n e p l u s (1)
c h ar n _ s i g n _ p o sn ; /1 P o s i t i o n d u s i g n e m o i n s (2 )
c h ar i n t _ p _ c s _ p r e c ed e s ; I I P o u r l e s v a l e u rs p os i t i v e s
/1 o u n u l l e, a u f o r m a t
/1 i n t e r n a t i o n a l :
I I l = e s p a c e, 0 = p a s d ' e s p a c e
I I e n t r e I e s ym bo l e m o n et a i r e
I I e t I e m o n t a n t (1)
c h ar i n t _ p_ s e p _ b y_ s p a c e ; I I P o ur l e s v a l e u rs
I I p o s i t i v e s OU
I I n u l l e s a u f o r m a t
I I i n t e r n a t i o n a l :
I I 1 = espace,
I I 0 = p a s d ' e s p a c e
I I e nt r e I e s y m b o l e m on e t a i r e
1/ e t I e m on t a n t ( o )
c h ar i n t _ n _ c s _ p r e ce d es ; I I P o u r l e s v a l e u rs n e ga t i v e s/I a u f or ma t i n t e r na t i o n al
I I 1 = l e s y m bo l e m o n et a i r e
I I p r e c~ de I e m on t a n t ,
I I 0 = I e s ym b o l e m on e t a i r e
I I s u i t I e m on t a n t ( l )
c h ar i n t _ n_ s e p _ b y_ s p a c e ; I I P o ur l e s v a l e u rs n eg a t i v es
I I a u f o r ma t i n t e rn a t i o n a l :
116 tn temot ional isanon
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 62/68
1/ 1 : e s p a c e ,
/1 0: pas d ' e s p a c e
/1 e n t r e I e s y m b o l e e t
II l e m o n t an t ( 0 )
c h a r i n t _ p _ s i g n _ p o s n i 1/ P o s i t i o n du s i g n e p l u s p o u r
I l l e s v a l e u T s a u f o r m a t
I I i n t e r n a t i o n a l (1)c h a r i n t _ n _ s ig n _ p os n i /1 P o s i t i o n d u s i g n e p l u s p o u r
/1 l e s v a l e u r s a u f o r m a t
/ / i n t e rn a t i o n a l (2 )
};
Si Ia valeur de p_ s i gn _pas!1 , n_ s ign _po sn , tn t .P_s ig n _pa sn , ou
int_n_sign_pasn est 0, le montant et le symbole monetaires sont
mis entre parentheses. Si cette valeur est 1, la chaine du signe est
placee avant Ie montant et Ie symbole monetaire , Si cette valeur est
2, la chaine du signe est p lacee apres le rnontant et le symbole mone-
taire, Si cette valeur est 3, la chaine du signe precede immediatement
le symboJe monetaire. Si cette valeur est 4, la chaine du signe suit
irn me dia tem en t Ie symbole monetaire.
La valeur \3 dans les chaines grouping et mon_grouping signifie que
chaque groupe est constitue de trois chiffres, cornrne dans
« 1,234,567.89 ».
* (asterisque)operateur d'in direction 2S
operatcur de d eclaration co rn plex e 39
operateur multiplication 19
h(accent circonflexe)
o pe ra te ur Otl e xc lu si f' bi t it bit 24
[J (crochets)
operateur d'indexation 25
operateur de declaration complexe 39
# ( ca ra ct er e d ie se l
d i r e c t i v e a u preprocesseur 4 , 6 3
## operateur dou b le -d ies e o u d e c on ca-
t e n a t i o n d e to ke ns 64& (esperluette)
operateur d'adresse 25,47
operateur ET b it 1 1bit 24
&& operateur logtque ET 23
!operareur logique N ON 23
!= different d e 22
o ( p a r e n t h e s e s ) 18,39
expression arithrnetique 18
o opera leu r a ppel d e foncti on 27
+ (plus)
operateur addition 19
+ (unaire)signe plus 19
++ operareur d'increm entarion 20
-(moins)
operateur soustraction 19
- (u na ire) s ig ne m oin s 19
-- op era re u r de decrementation 20
, (virgule)
operateur sequentiel 27
. operateur point 25
- - - ( t r o i spoints)
i nd i ca te ur d 'a rg ur n en t faeu ltatif 6 0
" " (gu ille rn e ts d ou b l es)
chaine de caracteres 16
/ ( s la sh)
operateur division 19
/I, r et * 1 , delimireurs de cornrnenta i re
4
- (tilde)
o perateu r N ON bit it bit 24
Index
I (tube)operateur OU b i t a b i t 24
I I operateur logiquc OU 23
< operareur inferieur il 22
cc operateur decalage ~gauche 24
< > - o p er at eu r i nf er ie ur OU egal a 22
= ( si gn e e gal )
operateur d'affectation simple 21
== o pe rate ur e ga l a 22
-> operateur fleche 25
> o p er at eu r s up er ie ur iI 22
»operateur decalage 11droite 24
>= operareur superieur ou egal 11 22?: (operateur conditionnel) 27
% (signe pourcent)
operateur modulo 19
Aa cc es i li a r nemo ir e
opera teu r d' 25
affecta Ion
operateur d' 21
afficherPage 2
A NSI C99
environnement virgule flottante
9 5 - 9 8fichier oriente octet ou caracrere
etendu 72
fonction
inline 58
fonctions rn ath ern atiq ue s p ou r les
nombres reels 90
gesrion des erreurs 95
macro DECIM AL_DIG 87
n or nb re s e n v ir gu I e f l or ta ntecategories de 87
optirni arion des operations 91
ordre des declarations et d e s
is tr uc tio n s 38
specificateur de conversion 80,83
r e s t r i c t
qualificateur de type 55
tableau d e longueur variable 48
118 Index Index 119
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 63/68
type _Bool 1 0
t yp e f lo tt an t c om p ie xe
wchar_t 6
appel de fonctlon S9
argument
appel d e f o nc ti on 59
d'une fonction 58
facu I t a t i f 6 0ob ligatoire 6 0
arguments
fonction 11n omb re v ar ia bl e d' 60-61
assert.h
fichier d'en-tete 71
auto
s pec ificateu r d e clas se d e
memorisation 41
Bbibliotheque standard
contenu de la 70-116
b it a b it
operateur 24
bloc
fo nctio n d 'ecritu re et d e le ctu re d e
77
instruction composee 31
bloc memoiregestion dynamique 106
boucle 34-36
fo r 3Sbranchcrnen r non conditionnel 36
break
instruction 37
ccaracrere
c la ss if ic atio n 9 8
c ar ac te re e te n du
fichier oriente 72caractere diese (#)
d irectiv e au p rep ro cess eu r 4 ,6 3
caractere multi-octets 6
conversion en 1 03
caracrere graphique 6
casse
changement de 98
categorie d e l oc a l i sa ti on
LC_ALI. 11 3
LC_COU ..ATE 1 13
LC_CTYPE 113
LC_MO ETARY 113
[C_NUMERIC 113
LC_TIME 113
chaine
sortie form atee d'une 78
chain e de caracteres 16,48,100-104con versi o n en nom bre 1 02
gulllem ers doub les 1 6
longue 17
chain e de caracteres eten dus 48
cham p de b it 46
cham p de b its ou variab le en tiere 47
changement de casse 98
char
voir t yp e c ha r
c la s se d 'a ll oc at io n a u to r na ti qu e
v ar ia bl e d e type structure er 4S
classe d e memo ri sa ti on
d' u ne v ariab le 4 0-4 2
d eterm in atio n d u lien d'un
i de nr if ic a t e UT 62
classifrcation des caracteres 98
CLOCKS_PER_SEC 107
co rn men taires , d ellm lte urs 4
complex.h
fich ier d 'en -tete 7 1
const
quahfica teur de type 53
constante 14-17caractere 16
decirnale 14
entiere 14
EXIT_FAiLURE 109
EXIT_SUCCESS 109
hexadecimale 14
octale 14
reelle 15
SIG_DH 111
SIG_IGN 111
signal noconstante d'adresse 50constante symbolique 63
continue
in struction 37
conrrole de processus 109-112
en voi d 'un sign al 1 10-1 11
conversion
operateur de 27
con version de type 28-31
assignation £1 poin teur 29
co nve rs io ns arith rn eriq ues u su elles 2 9
coordon nees polaires 1 2
ctype.h
Achier d'en- tete 71
D__ D AT E _ _
macro 70
declaration 38--40
prototype d'une fonction
portee 8
p ro to ty pe d e f on c ti on 56
d ec la ra ti on c om p le x e
operateur 39
defin ition de fun ction 57-58
MI irniteurs de cornmentaire (//,1* et
* fJ 4
#define
di rect ive 63
defined
operateur 67
directive au preprocesseu r 4, 63-70
double
n o uv el le s f on ct io n s m a th er na ti qu e
pour 90
drapeau de statut
g es tion d es ex cep tio ns en v irg u I e
flottante 95
E
E ! Sbibliotheque ANSI 72-83
e cr itu re d 'u n f ic hie r
f on c ti o n pOLL r I' 76
#elif
directive 66
#else
directive 66
#endif
directive 66
en-tete
fichier d' 2
e nr eg is tr em e nt ( re co rd )
structure d 'un 43--45
entier
voir t yp e e n ti er
sortie forrnatee d 'un 79
e ntie r d e ta ille f ix e
in tervalle de valeur d 'un 84
entree formatee
fon ction s pour 81 -83
enumeration
etiquette (tag) 43
e nv ir on n er ne nt v ir gu le f lo tt an te 95erreurs
traiternent de s
e n t r ee s- so rt : e s 73
errno.h
fich ier d 'en -tete 71
etiquette
d'une s tru ctu re 4 4-45
pour Iesunions 46
etiquette (tag)
enumeration 43
EX IT_F AILU RE 1 09
E XIT _S UC CE SS 1 09
exposant
nombre en virgule flo ttan te 1 2
expression
appel de fonction 59
o p erateu r et 17-28
expression d'affectation 22
e x pr es si on d e c on tr ole
boucle 34
extern
s pec ific ateu r d e clas se d e
memorisation 41
Ffichier
ecriture 76
foriction d 'a cce s 1 1un 73
lecture 76
le ct u r e- ec ri t u r e
traiternent des crreurs 73
fichier d'en-tere
bibliotheque ANSI C 71
standard 71f i ch i er d 'en - t et e
assert.h 71
complex. h 71
ctype.h 98
errno.h 71
f ellv .h (· ) 9 5
flo at.h 1 1,8 5
12 0 Index Index 12 1
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 64/68
in ttypes.h 89
iocale.h 112
i50646.h 28, 71
lirn its.h 9 , 7 1
rnath.h 71
setjrnp.h 111signal.h 1 10
stdarg.h 71stdbool .h 71
stddef.h 45
stdint.h 4S
stdint.hj") 10
stdio.h 71
stdlib .h 103
st ring.h 100
tgmath.h 71
time.h 107
wchar.h 71
wcr ype .h 99
intervallc de v al eu r d es t yp es e n ti er s
34
f ic hi er d 'e n -t et e s td io .h
f on ct io n d 'a cc es aUK fic hie rs 7 3-7 6
f on et i o n s d e l ec t u r ej ee ri t U re 76-83
f ic hi er d 'e n -r et e w c ha r. h
f on eti o n d e Ie ctu r ele cT i tu r e d e
ca ractere 77
fichier sou rce 2
FILE__
macro 69
FILEstructure 72
float.h
fichier d'en- tete 71
Aottant l J ( ) i r t yp e f lo tt an t
fo n et i on 55-61
a 110m b re d' argu m ents va ria ble
60-61
acces aUK fichiers 73-76
argument d'une 58
c la ss if ic atio n d es c ara cte re s 9 8, 9 9
changement d e c as se 99
conver io n chatne-nom bre 1 02declaration
s tyl e Kern ighan & R itc hie o u s ty le
prototype 58
d efin itio n 5 7-5 8
date et heure 1 07
en t ree-sortie
traitem en t des erreurs 73
en tree s-so rties su r u n fic hier 7 6-8 3
g estio n d yn am iq ue d e la m em oire
106
passage d 'argum en t II u ne 59
prototype wir p ro to ty pe d e f on c ti on
fonction d 'ecritu re et d e lecture de
bloc 77
fo nc tio n m ai n 55fonetion mathemarique 88-98
g es ti on d es e rr eu r s 95
p ou r les ty pes fio ttan ts co mp lex es 9 2
p o u r Ies ty pes re els flo ttan rs 8 9-9 1
fonction
abort 1 09
abs 89
arcs 90
acosh 90
asctim e 1 08
asin 90
asinh 90
alan 90
atan2 90
aranh 90
atoi 1 02
bsearch lO S
btowc 100
cabs 93
cacos 93
cacosh 93
calloc 106
carg 93casin 93
casinh 93
catan 93
catarrh 93
cbrt 90
ccos 93
ccosh 93
ceil 90
cexp 9 3
cimag 93
clearerr 74
clock 107clog 93
con] 93
copysign 91
cos 90
cosh 90
cpow 93
eproj 93
creal 93
csin 93
csinh 93
csqrt 93
ctan 93
ctanh 93
Clime 108
date 107difftim e 1 07
div 89
er f 91
erfc 91
exit 109
ex p 90
exp2 90
expmt 90
fabs 90
fclose() 74
fdirn 91
f ec le are xc ep t 9 6
fegeten v 97
fegerexceptflag 96
fe ge tr ou n d 97
f eho l de x ce pt 97
feof 74
feraiseexcept 96
ferror 74
feseten v 97
fcserexceptflag 96
fesetround 97
fetestexcept 96feupdateenv 97
fflush 74
fgetc 76
tgetpos 74
fgets 76
fioor 90
lim 91
fmax 91
fmin 91
fmod 90
fopen 74
fprintf 77fread 77
free 106
freopen 75
frexp 90
fscanf 81
fseek 75
fsetpos 74
ftell 75
fwide 73
fwrite 77
getc 76
getchar 76
getenv 109
gets 76
gmtime 107hypot 90
ilogb 90,95
imaxabs 89
irnaxdiv 89
isalnum 98
isalpha 98
isblank 99
iscntrl 9 9
isdigit 98
isgraph 9 8
islower 98
isprint 98
ispunct 99
i s space 98
isupper 98
iswctype 99
iswlower 100
isxdigit 98
lab s 89
ldexp 90
ldiv 89
igamma 9}
lIabs 89IIdiv 89
llrint 91
llround 91
localeconv 114-116
localtirne 108
log 90
10glO 90
logtp 90
log2 90
logb 90
longjmp 1 1 1
Irin t 91lround 91
main 109
rnalloc 106
rnblen 104
mbsimt. 104
mbs rowcs 104
rnbtowc 104
122 Index Index 123
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 65/68
memchr lOS
l l1 emC111 ]J lOS
memcpy lOS
memmove 106
mernset 106
modf 90
nearbyint 91
nextafter 91next toward 91
perror 75, 11 2
pfutc 76
pfuts 76
pow 90
prinrf 77
s p ec if ic a ti on d e c o nve rs io n 78
putc 76
putchar 76
puts 7 6
qsor t 105
mise 11 0
rand 89
realloc 106
remainder 90
remove 75
rernquo 90
rename 7S
rewind 7S
rint 91
round 91
scalbln 91
scalbn 91scanf 81
specifications de conversion 82
setbuf 75
scrimp 111
scrlocale 113
sin 90
sinh 90
snprin tf 1 03
sprintf 103
sqrr 90
srand 89
sscan f 1 03strcat 1 00
strchr 100
strcmp 1 00
strcoll 101
strcpy 101
strcspn 101
srrerror 112
strftim e 1 08
strlen 1 01
strn cat 1 01
s rmcmp 1 01
st rncpy 101
strpbrk 101
strrchr 1 01
strspn 101strstr 1 01
strtod 10 2
strto im ax 1 03
strtok 102
strtol 102
strto ll 1 02
strtoul 1 02
strtoull 1 02
strtoum ax 1 03
strxfrm 102
system 1 09
tan 90
tanh 90
tgamm a 91
time 10 7
rmpfile 76
tmpnam 76
tolower 99
roupper 99
t ow ct ra n s 99
towupper 1 00
rrunc 91
ungetc 76vfprintf 77
vfscan f 81
vprintf 77
vscanf 81
vsn prin tf 1 03
vsprintf 103
vsscanf 103
wcsftime 1 08
wctob 100
wctrans 99
wctype 99
wcstombs 104wctornb 1 04
FP_CONTRA CT 92f un c _ _
macro 70
Gg es tio n d es e rr eu rs
pour les fonctions mathematiques
9S
pou r II'S f on c ti on s s y st er n e 11 1
g es tio n d yn arn iq ue d es b lo cs mernoire
106goto 111
in struction 36
Hheme
fonctlon 107
I
id en tificate ur 6categoric 7
l ie n d 'u n 61
porte 8
#include
d irectiv e d 'in clu sio n 2
lif
directive 66
#ifdef
directive 67
#ifndef
directive 67
i f . .. e ls ein struction 32
#include
direc tive 6 5
INFlNITY
constante 88
initialisation
tab leau 49
tableau multidimensionnel SO
variab le 42
va r iab le de typ e structure 45
inline
fonction 58in stru ctio n 2 , 3 1-3 8
dans Ie corps d 'une fonction 58
if ... e lse 32
switch 33
i n st ru c ti on c o rn p o se e
b loc 31
in str uc tio n-e xp re ss io n 3 2
intN_t
t yp e e n ti er 10
int_fastN_t
type entier 1 0inUeastN_t
type entler 10
in te rn atio na lis atio n 1 1 2- 11 6
i nt er va ll e d e v al eu r
d es ty pe s flo rta n IS 85
type 1 1o tta n t 1 2
intmax_t
entier
type 10
intptr_l
entier
type 1 0
inttypes.h
fichier d'en-tete 71
i so646.hfichier d'en-tete 28,71
Jjeu de caracteres 4-6
erendu 6
de b a se 4
d'execu tion 4
source 4
J(
Kernighan & Ritchie
style de decla ra t ion des fonctions 58
Ke rn ig ha n , B ri an 1
L
lecture d'un fichier
fon ction pour la 76
lien d 'un iden tificateur 6 1
lien ex tern e d 'un iden tificareur 6 1
lien in tern e d 'un iden tificateur 6 2lirnits.h
fich ie r d 'e n-te te 9 , 7 1
#line
directive 68L INE _ _
macro 69
liste des caracteres acceptables 83
localc.h
1 24 Index Index 125
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 66/68
fichier d'en-tete 71
longu eu r d u ga b ar i t
specification 78
M
macrogener ique 94
pour les t yp e s c ompl ex e s 93macro
_Complex_1 93
_1.maginary_1 94
assert 112
complex 93
DBL_MANT_DIG 85
DBL_M AX_EXP 86
DBL_MIN_EXP 85
DECIMAL_D1G 87
EDOM 9SERANGE 95
FE_ALL_EXCEPT 96
FE_DFL_ENV 97
FE_DIVBYZERO 96
FE_DOWNWARD 97
FE_INEXACT 96
fE_INVALID 96
FE_OVERFLOW 96
FE_TONEAREST 97
FE_TOWARDZERO 97
FE_UNDERFLOW 96FE_UPWARD 97
FLT_DIG 86
FLT_EPSlLON 86
FLT_EVAL_MEnIOD 92
FLT_MANT_DIG 85
FLT_MAX 86
FLT_MA){_10_EXP 86
FLT_MAX_EXP 86
FLT_MIN 86
FLT_MIN_lO_EXP 86
FLT_MIN_EXP 85
FLT_RADIX 85FLT_ROUNDS 85
FP _FAST _FMA 92
FP _FAST_FMAF 92
FP_FASr_FMAL 92
pp_ILOGBO 95
FP_)LOGBNAN 9S
FP_INFINITE 87
FP_NAN 87
FP _NORMAL 87
FP _SUBNORMAL 87
FP_ZERO 87
fpclassify 87
HUGE_VAL 95
HUGE_VAIF 95
HUGE_ VALL 95
I94
imaginary 94
INTN_C() 15
I NTMAX_C() 15
isfinite 87
isgreater 91
isgreaterequalt ) 91
isin f 87
isless 91
isles se qu al 9 1
islessgreater 91
isnan 88is n o rma I 88
isunordered 91
LDBL_MANT_DlG 85LDBL_MAX_EXP 86
LDBL_MIN_EXP 85
math_enhandl ing 98
MB_CUR__MAX 103
NDEBUG 1 1 2
offserof 4S
SIGABRT 110
SIGFPE 110
SJGILL 110SJGINT 110
s ig n b i t 8 8
SIGSEGV 110
SIGTERM 110
UINTN_C{) 15
UINTMAX_C() 15
main 2
mantisse
nombre en virgu Ie flo ttan te 1 2
rnath.h
fichier d'en-tete 71
matrice (tableau bidimensionnel) 49
mbstate j
type 73
membre d'unc structure 44
m od es d e co ntro le e t a rith rn eriq ue en
virgule flottante 95
m ot- de s tru ct 44
mots-des
liste des 7
N
NAN
c on st a n t e 88
n om e xte rn edefin ition de fonction et 57
r e st ri ct io n s impo s ee s pa r l e s ed i teurs
de liens 63
nombre
conversion d 'une chaine en 1 02
no rnb re com plexe 1 2
n om b re e n v ir gu le f lo tta nte
categorie de 87
macro golneri q u e e t 94
o pt im is at io n d es o pe ra ti on s 91
sortie forrn atee d 'un 78
nornbre irnaginaire 1 2nom ex terne 7
no rme ANSI C99 I
type flottant complexe 12
norrne ISOIIEC9899 I
ooctet
fichier oriente 72
operateur 17
-e - (fleche) 2S
. ( po in t ) 25
addition
+ 1 9
d'affectatlon 21
d'affectation compose 21
a pp el d e f on ct io n 0 27
a u tr e n o ta ti on 28
binaire 19
bit II bi t 24
conditionnel (?:) 27
de co n v ersio n
(type) 27d 'acce s 1 1la m ern oire 2 5-2 6
d'adresse
& (e sp erlu ette ) 2 5
decalage 1 1droite» 24
decalage ilgauche« 24
de dec remen ta r i on-- 20
defined 67
d'incrernentation
+ + 20d'indexation
[J (crochets) 25
d'indirecnon
* (etoile) 25, 50
division1 19
E T b it it bi t & (ampersand) 24
modulo
'1 6 19
multiplication
* 19NON bit 1 1bit -(tilde) 24
OU bi t a bit 24
OU exclusif bi t a bit> 24pour les declaration s com plex es 39
r eg te s d e p ri or ir e 17
sequentiel o 27sizeof 27
tableau et 49
soustraction
- 19
o perateu r rem aire 19
operateur unaire 19
ope ra t ion d 'en t r ee - sor ti e
p os it io n c ou ra nt e d' u n fichler 72
p
parenthese 51
pointeur 50-53
conversion en 29
tableau et 49
v er s u ne structure 45
pointeur nu l 51
p oin te ur v ers u ne fu nctio n 52
po i n teu r soperation arithrnetique S u r l es
51-52
portee
corps d'une fonction 8fichier 8
porrec d 'un iden tificateur 8
position c ou ra nte d 'u n f ic hie r
operation d'entree-sortie 72
#pragma
directive 69
pragma
FENV _ACCESS 97
126 Index Index127
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 67/68
C x._L lM IT ED _R AN GE 94
priorite de s operateurs 17
prototype
s ty le d e d ec la ra tio n d es fo nc tio ns 58
p ro to ty pe d e f on ct io n 56
portee 8
Qq ua lifi ca te ur d e t yp e 53-55
q ua li fi ca ti on d es t yp es 53
Rrecursive
fonction 58
reel lIIlir ree l f lo t tan t
recherche
utilitaire de 104register
s pe cifi ca te ur d e c la ss e d e
memorisation 41
r ep re se nta ti on d es no rnbre s complexes
12
return
instruction 37
Richards, M . 1
R i tc h ie , D enn i s
ss e que nc e d 'e c happe r ne n t
c o ns ta n te c a ra c te r e 16
s equen c es d 'e c happe r ne n t 5
saisie
u ti Iisa tion des t rigrap hes 6
sau t Iocaux /sauts non locau x 1 11
sau ts n on lo cau x 111
setjmp.h
fichier d'en-tete 71
signal
e nv oi d 'u n 110
signal.hfichier d'en-tete 71
sizeof
opera te u r 27
sortie forrnatee
fonction pour une 77-81
s p ec if ic a te u r d e c onve rs io n
in troduit en ANSI C99 80
s pe cif ic ate ur d e ty pe v oi d
conversion de type et 31
s p ec if ic a ti o ns d e c onve rs io n
pour les fonctions prin tf 78-81
p ou r le s fo nc tio ns sca nf 82-83
static
s pe ci fic at eu r d e c la ss e d em em orisatio n 41 .
stdarg.h
f ich ier d ' en - te te 71
stdbool.h
fic hier d 'en -tete 7 1_ _ $ 1 'D C _ _
macro 70
stddef.h
f ieh ie r d ' en- tete 71__ STD_HOSTED __
macro 70
stdint.hf ich ier d ' en - te te 71,81
stdint.hr')
fichier d'en-tete ]0
stdio.h
f i ch ie r d ' en- tete 71
stdlib.h
f i ch ie r d ' en- rete 71_ _ $ 1'D _ V E R SI ON _ _
macro 70
string.h
fich ie r d ' en -te te 7 1
structuremernbre d'une 44-45
type 43
structure et champ de bit 46
switch
instruction 33
sy ste rn e d 'explo ita tion
c om mu nic atio n av ec Ie 109
Ttableau 48-50
acceder aux elem ents d 'un 25in iti al is ati on 4 9
m ultid irn en sio nn el 4 8
pointeur et 49
tableau de longu eur variab le 48
t ab le a u mu lt id imen s io n ne l
initialisation S O
tgn13th.h
fichier d'en-tete 71
Thompson , K. I__ T iM E _ _
macro 70
time.h
fichier d'en-tete 71
tokens 4tri
u ti li ta ir e d e 104
type 9-1 3
enumere 42
arithrnetique 42
agrege 42
bib lio theque AN SI C 71
_Bool 10
caracrere etendu 48
char 9
in tervalle de valeur du 84
derive 42double 1 1
_Complex 13
fo n c t io ns rn a t he m ati q u es p ou r le
93
_Imaginary 13
in tervalle d e valeur et precisio n 85
n ou ve au x s pe cifi ca te ur s d e
conversion pour lc 80
d ou b le c om pl ex
fo nc rio ns rn ath ern atiq ue s p ou r Ie
9 2
d ou ble_ t et m acroF LT _E VA L_ M E TH O D
92
entier 9-11
sp ec ifi ca te ur s d e c on ve rs io n p ou r
II'S ch aines d e form at de
prin tf 80
entier non signe 9
entier signe 9
fenv_t 97
fexcepr j 96
float 11
_Complex 13_Im aginary 1 3
Ilottan t 1 1
ccmplexe 12
im ag in air e p ur 12
m te rv al le d e v ale ur e t p re cis io n
reel 1 1
float j e t m ac ro
FLT_EVAL_METHOD
9 2
i nd ic ate ur d e
void 13
in t 9
in tervalle de valeur du 84
long dou b le 1 1
_Complex 13
_Imaginary J3
j nrervalle de valeur er precision 85
p ec ific ar eu r d e c on ve rs io n p ou r
80
long in t 9
long
in tervalle de valeur du 84
long long 9
in tervalle de valeur du 84
long long in t(') 9
mbstatej 104
ptrdiff_t 71
predefini 9-13
r e el f lo r ta n t 11
p re cis io n e t i nt er va ll e d e v al eu r 12
sca la ir e 4 2
short
in tervalle de valeu r d u 84
short in t 9
s ig __ ato mi c_ t ) 1)
signed char 9
in tervalle de valeur du 84
size_t 71
uintmax j 11
unsigned char 9
u ns ig ne d in t 10
u ns ig ne d lo ng 10
u nsig ne d lo ng lo ng 10
u ns ig ne d s ho rt 10
wchal"_! 6,48, 71
wint_t 71
typ e d eriv e 4 2-5 5
t yp e s ca la ire 42
t yp e s t r u c t ur e 43
types agreges 42
t ype s c ompl ex e s
m acros pou r les 93
types A e tt a n r s c om p l ex es
fo nct io ns m at h e m atiq u es p o u r II'S9 2
t yp e s r e el s f lo r ta n ts
12 8 Index.
5/12/2018 C - Precis & Concis - slidepdf.com
http://slidepdf.com/reader/full/c-precis-concis 68/68
fonction m athernatique pour les 89
ulundef
directive 65U nicod e, en cod ag e des caracteres 6
union 46champ de bitet 46
unite de traduction 4
vvariab le 40-42
classe de m emorisation d 'une 40
initialisation 42
p oin teur et 50
typ e enurnere et 43
variable d'environnernent 109
variable entiere de largeur fix e
s p ec if ic a te u r d e c onve rs io n POI.Il" un e
83
v aria b l e g lo b al e crrno 9S
virgule
oper a teu r ( ,) 27
v i rgu le f lo t ta n te
environnement 96-99
void
s pe ci fi ca te ur d e type
conversion de type et 31
volatile
q ua lifi ca te ur d e type S3
wwchar.h
fichier d'en-tete 71wctype.h .
Rehie r d'en-tete 71,99
while
instruction 34
Achcve d'impr imer Ie 6 fcwier 2003