c - precis & concis

68
 http://www.free-livres.com/

Upload: daniel-boucon

Post on 13-Jul-2015

87 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: C - Precis & Concis

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

Page 2: C - Precis & Concis

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

Page 3: C - Precis & Concis

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

Page 4: C - Precis & Concis

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(·)

Page 5: C - Precis & Concis

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

Page 6: C - Precis & Concis

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-

 

Page 7: C - Precis & Concis

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

 

Page 8: C - Precis & Concis

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,

 

Page 9: C - Precis & Concis

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.

 

Page 10: C - Precis & Concis

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

 

Page 11: C - Precis & Concis

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,

 

Page 12: C - Precis & Concis

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

 

Page 13: C - Precis & Concis

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 .

 

Page 14: C - Precis & Concis

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.

 

Page 15: C - Precis & Concis

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 ,

 

Page 16: C - Precis & Concis

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

 

Page 17: C - Precis & Concis

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

 

Page 18: C - Precis & Concis

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.

 

Page 19: C - Precis & Concis

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

 

Page 20: C - Precis & Concis

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.

 

Page 21: C - Precis & Concis

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,

 

Page 22: C - Precis & Concis

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;

 

Page 23: C - Precis & Concis

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 ;

 

Page 24: C - Precis & Concis

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

 

Page 25: C - Precis & Concis

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.

 

Page 26: C - Precis & Concis

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,

 

Page 27: C - Precis & Concis

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.

 

Page 28: C - Precis & Concis

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:

 

Page 29: C - Precis & Concis

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

 

Page 30: C - Precis & Concis

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,

 

Page 31: C - Precis & Concis

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

 

Page 32: C - Precis & Concis

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.

 

Page 33: C - Precis & Concis

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 .

 

Page 34: C - Precis & Concis

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

 

Page 35: C - Precis & Concis

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

 

Page 36: C - Precis & Concis

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 (< < »).

 

Page 37: C - Precis & Concis

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

Page 38: C - Precis & Concis

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

Page 39: C - Precis & Concis

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

Page 40: C - Precis & Concis

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

Page 41: C - Precis & Concis

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.

 

Page 42: C - Precis & Concis

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

Page 43: C - Precis & Concis

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

Page 44: C - Precis & Concis

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

Page 45: C - Precis & Concis

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

Page 46: C - Precis & Concis

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

Page 47: C - Precis & Concis

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

Page 48: C - Precis & Concis

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

Page 49: C - Precis & Concis

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

Page 50: C - Precis & Concis

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

Page 51: C - Precis & Concis

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?

Page 52: C - Precis & Concis

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

Page 53: C - Precis & Concis

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

Page 54: C - Precis & Concis

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

Page 55: C - Precis & Concis

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

Page 56: C - Precis & Concis

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

Page 57: C - Precis & Concis

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

Page 58: C - Precis & Concis

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

Page 59: C - Precis & Concis

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

Page 60: C - Precis & Concis

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

Page 61: C - Precis & Concis

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

Page 62: C - Precis & Concis

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

Page 63: C - Precis & Concis

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

Page 64: C - Precis & Concis

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

Page 65: C - Precis & Concis

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

Page 66: C - Precis & Concis

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

Page 67: C - Precis & Concis

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.

Page 68: C - Precis & Concis

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