You are on page 1of 6

CAPITOLUL 13

13. Preprocesorul
2ULFHSURJUDP&vQID]DGHFRPSLODUHWUHFHvQWkLSULQWURSUHSURFHVDUHLDELDDSRL
VH YD JHQHUD FRGXO HFKLYDOHQW vQ DVDPEODUH 3UHSURFHVRUXO GXS FXP vL VSXQH L QXPHOH
IDFHSULPDSURFHVDUHDVXSUDVXUVHL&FRQIRUPGLUHFWLYHORULQFOXVHGLUHFWVDXLQGLUHFWSULQ
LQFOXGHUHGHELOLRWHFLGHFWUHSURJUDPDWRU
'LUHFWLYHOHSUHSURFHVRUXOXLVXQWOLQLLVXUVDOFURUSULPFDUDFWHUGLIHULWGHVSD LLOH
DOEHHVWH GLH] /LQLLOHFDUHFRQ LQGLUHFWLYHDOHSUHSURFHVRUXOXLVXQWHOLPLQDWHGLQWH[WXO
VXUVvQDLQWHFDDFHVWDVILHFLWLWGHFRPSLODWRU3UHSURFHVRUXOvQORFXLHWHRULFHVHFYHQ GH
VSD LLDOEH LQFOXVLYFRPHQWDULL FXXQVLQJXUVSD LX
'LUHFWLYDQXO
2 OLQLH FDUH FRQ LQH QXPDL FDUDFWHUXO  vQ DIDU GH HYHQWXDOHOH VSD LL DOEH  HVWH
LJQRUDWGHSUHSURFHVRU
13.2. Directivele #GHILQHLundef
GHILQHLGHQWLILFDWRU>> OLVWDBDUJXPHQWH @FRUS@
XQGHILGHQWLILFDWRU
'LUHFWLYD GHILQH GHILQHWH R PDFURLQVWUXF LXQH 'DF PDFURLQVWUXF LXQHD DUH
DUJXPHQWH SDUDQWH]D VWkQJ WUHEXLH V DSDU vQ GHILQL LH OLSLW GH QXPHOH GHILQLW
$UJXPHQWHOH VH VHSDU SULQ YLUJXO &RUSXO PDFURGHILQL LHL QX SRDWH DYHD PDL PXOW GH R
OLQLHVXUV VHSRDWHFRQWLQXDOLQLDFX? 
QID]DGHSUHSURFHVDUHDSDUL LDQXPHOXLGHPDFURvQWH[WXOVXUV HYHQWXDOXUPDWGH
R OLVW GH DUJXPHQWH DFWXDOH LQ SDUDQWH]H  HVWH vQORFXLW FX FRUSXO GH PDFUR vQ FDUH
SDUDPHWULLIRUPDOLDXIRVWvQORFXL LFXWH[WXOSDUDPHWULORUDFWXDOL
'XS VXEVWLWX LH WH[WXO RE LQXW HVWH FLWLW GLQ QRX SkQ FkQG QX PDL VXQW QHFHVDUH
VXEVWLWX LL GLUHFWLYHOHSUHSURFHVRUXOXLQXVXQWUHFXQRVFXWHvQWH[WXOSURGXVSULQH[SDQGDUHD
XQHL PDFURLQVWUXF LXQL  1XPHOH GH PDFUR QX VXQW UHFXQRVFXWH vQ LUXUL GH FDUDFWHUH VDX
FRPHQWDULL2PDFURLQVWUXF LXQHQXVHSRDWHDSHODUHFXUVLY
/DDSHOXOXQHLPDFURFXDUJXPHQWHQXPDLYLUJXOHOHGHSHSULPXOQLYHOVXQWOXDWHFD
VHSDUDWRDUH GH DUJXPHQWH QX L FHOH FDUH DSDU vQ SDUDQWH]H VDX vQWUH DSRVWURIH VDX
JKLOLPHOH 
Q FRUSXO XQXL PDFUR VH SRW IRORVL XUPWRULL RSHUDWRUL FDUH QX DF LRQHD] GHFkW vQ
ID]DGHSUHSURFHVDUH



FDUHGLVSDUHWRWDOQHUPkQvQGQLFLPFDUXQVSD LXL
  FDUH SODVDW LQ ID D XQXL DUJXPHQW IRUPDO vO vQORFXLHWH FX DUJXPHQWXO DFWXDO
3/$6$71*+,/,0(/(

'LUHFWLYDXQGHIWHUJHRPDFURGHILQL LHGLQWDEHODGHPDFURGHILQL LL

13.3. Directiva #include


#include <nume_fisier>
#include "nume_fisier"
#include nume_macro
1XPHOH GH PDFUR SkQ OD XUP WUHEXLH V VH H[SDQGH]H vQ FHYD GH IRUPD
QXPHBILVLHU! VDX QXPHBILVLHU (IHFWXO GLUHFWLYHL FRQVW GLQ LQVHUDUHD vQ XQLWDWHD GH
FRPSLODUHvQORFXOGLUHFWLYHLLQFOXGHDWH[WXOXLGLQILLHUXOUHVSHFWLY7H[WXOLQVHUDWSRDWH
FRQ LQHLHOGLUHFWLYHGHSUHSURFHVDUHLQFOXVLYGLUHFWLYDLQFOXGH
'DFvQQXPHOHGHILLHUDSDUHLRFDOHGHDFFHVVHYDFXWDQXPDLDFROR$OWIHO
GDFVDIRORVLWIRUPDFXJKLOLPHOHVHFDXWvQGLUHFWRUXOFXUHQW8UPHD]GDFWRWQXVD
ORFDOL]DWILLHUXOVVHFDXWHSHUkQGvQGLUHFWRDUHOHGLQOLVWDGDWODLQVWDODUHVDXSHOLQLDGH
FRPDQGVDXvQPHGLXOLQWHJUDW
'LUHFWLYHGHFRPSLODUHFRQGL LRQDW
"#" "LIH[SUHVLHBFRQVWDQWB
[ text_1 ]
[ "#" "HOLIH[SUHVLHBFRQVWDQWB
text_2 ]...
[ "#" "else"
text_else ]
"#" "endif"
'DF H[SUHVLDBQXHVWHQXO DWXQFLVHFRPSLOHD]WH[WBDOWIHO GDF H[SUHVLDB
QXHVWHQXODWXQFLVHFRPSLOHD]WH[WBHWFDOWIHOGDFHVWHSUH]HQWGLUHFWLYDHOVHVH
FRPSLOHD]WH[WBHOVH'LUHFWLYHOHGHFRPSLODUHFRQGL LRQDWSRWILvPEULFDWH
([SUHVLDFRQGL LRQDOSRDWHFRQ LQHRSHUDWRUXOGHSUHSURFHVDUHGHILQHG$FHVWDDUH
XQDUJXPHQWXQQXPHGHPDFURHYHQWXDOvQSDUDQWH]H9DORDUHDH[SUHVLHLGHILQHG QXPH
HVWHGDFDQXPHOHHVWHGHILQLWFXGHILQHGVDXGDFQXH[LVWRPDFURFXDFHOQXPH8Q
LGHQWLILFDWRUGHILQLWFXXQFRUSGHPDFURYLGVHFRQVLGHUGHILQLW
#LIGHIQXPHHFKLYDOHQWFXif defined (nume)
#LIQGHIQXPHHFKLYDOHQWFXif !defined (nume)
13.5. Directiva #line
#line QXPUBOLQLH>nume_fisier"]
(IHFWXOGLUHFWLYHLFRQVWvQDFHHDFvQILLHUXOSURGXVGH& SUHSURFHVRUXO&RIHULW
FDXWLOLWDU VDXLQPHVDMHOHGHHURDUHHWFOLQLLOHFDUHXUPHD]GXSOLQHYRUILUHIHULWHFDL
FXPDUvQFHSHFXOLQLDQXPUXOQXPUBOLQLHLDUYHQLGLQILLHUXOQXPHBILLHU

'H RELFHL GLUHFWLYD OLQH QX DSDUH vQ SURJUDPHOH VFULVH FX PkQD FL PDL DOHV vQ
SURJUDPHOHJHQHUDWHDXWRPDW'DFQXPHOHGHILLHUOLSVHWHHOUPkQHFHOYDODELOvQDFHO
PRPHQW
QDUJXPHQWHOHGLUHFWLYHLOLQHPDFURLQVWUXF LXQLOHVXQWH[SDQGDWHFDLODGLUHFWLYD
LQFOXGH
13.6. Directiva #error
#error mesaj
(IHFWXOHLFRQVWvQJHQHUDUHDXQXLPHVDMGHHURDUHGHIRUPD
(UURUQXPHBILLHUOLQHQXPUBOLQLH(UURUGLUHFWLYHPHVDM
&RPSLODUHD XQHL GLUHFWLYH HUURU RSUHWH FRPSLODUHD 'H RELFHL DSDUH vQ ILLHUHOH DQWHW
LQFOXVHFXGLUHFWLYDLQFOXGH vQFDGUXOXQHLVHFYHQ HFRPSLODWHFRQGL LRQDW'HH[HPSOX
#if !defined ( __cplusplus )
#error Nu se poate compila decit in C++
#endif
13.7. Directivele #pragma
#pragma argsused
3RDWH DSDUH QXPDL vQ DIDUD XQHL IXQF LL $UH FD HIHFW VXSULPDUHD PHVDMXOXL GH
DYHUWLVPHQW UHIHULWRU OD QHXWLOL]DUHD XQXL SDUDPHWUX IRUPDO GDU QXPDL vQ SULPD IXQF LH
FRPSLODWGXSDSDUL LDGLUHFWLYHL
#pragma exit nume_functie [prioritate]
#pragma startup nume_functie [prioritate]
,QVHUHD] IXQF LLOH FLWDWH GHILQLWH FD YRLG QXPHBIXQFWLH YRLG  SHQWUX DSHO vQDLQWH GH
PDLQ UHVSHFWLY GXS WHUPLQDUHD IXQF LHL PDLQ  3ULRULWDWHD HVWH XQ vQWUHJ GH OD  OD 
)XQF LLOH FX SULRULW L PDL PLFL YRU IL DSHODWH PDL GHYUHPH OD ODQVDUH L PDL WkU]LX OD
WHUPLQDUHDH[HFX LHL3ULRULW LOHGHODODVXQWUH]HUYDWHSHQWUXUXWLQHOHGLQELEOLRWHFLOH
7XUER 'DF SULRULWDWHD OLSVHWH VH LD  )XQF LLOH FLWDWH WUHEXLH GHFODUDWH vQDLQWHD
DSDUL LHLGLUHFWLYHL
SUDJPDLQOLQH
$QXQ  FRPSLODWRUXO F vQ SURJUDP H[LVW FRG LQOLQH vQ OLPEDM GH DVDPEODUH (VWH
HFKLYDOHQW FX RS LXQHD GH FRPSLODUH % QWkOQLUHD GLUHFWLYHL SUDJPD LQOLQH GDF
RS LXQHD%QXHVWHDFWLYDUHFDHIHFWUHODQVDUHDFRPSLOULLFXRS LXQHD%DFWLYDW
#pragma option

#pragma option optiune [,optiune]...


2S LXQL GH FRPSLODUH FDUH SRW DSDUH vQ SUDJPD RSWLRQ 180$, 1$,17( '(
)2/26,5($ 818, 180( '( 0$&52 &$5( 1&(3( &8 '28 /,1,8( '(
68%/,1,(5(6$81$,17('($3$5,,$35,08/8,$720/(;,&$/&
(QXPHBDVDPEORU
IRS LXQHBIORWDQW
LQXPUBFDUDFWHUHBVHPQLILFDWLYH
PPRGHOBPHPRULH
QGLUHFWRUBLHLUH
RQXPHBILVLHUBLHLUH
X JHQHUDUHGHOLQLX HGHVXEOLQLHUHSHQWUXJOREDOL
]QXPHBVHJPHQW
2S LXQLFDUHSRWDSDUHQXPDLGDFDSDUvQDIDUDRULFURUGHFODUD LLGHRELHFWHVDXIXQF LL
 LQVWUXF LXQL
 LQVWUXF LXQL
D FRQWUROXODOLQLHULL
II FRQWUROUDSLGDORSHUD LLORUvQYLUJXODPRELO
* RSWLPL]DUHSHQWUXYLWH]
N FRQWUROQRUPDODOVWLYHL
1 FRQWUROXOVWLYHL
2 FRQWUROXORSWLPL]ULL
S VHFYHQ GHDSHO3DVFDO
U DORFDUHUHJLVWUH
Y FRQWUROSHQWUXGHSDQDUH
\ FRQWURODVXSUDQXPHUHORUGHOLQLLvQFRGXORELHFW
2S LXQLFDUHSRWILGDWHRULXQGHVLDXHIHFWLPHGLDW
$ VHWXOGHFXYLQWHFKHLH
& FRPHQWDULLvPEULFDWH
G FRQWRSLUHDLUXULORUGXSOLFDWH
JQXPU RSULUHGXSQXPUDYHUWLVPHQWH
MQXPU RSULUHGXSQXPUHURUL
. WLSXOFKDUHVWHIUVHPQ
#pragma warn
#pragma warn +xxx
$YHUWLVPHQWHOH[[[VXQWDFWLYDWH
#pragma warn -xxx
$YHUWLVPHQWHOH[[[VXQWLQDFWLYDWH
'XSFXPDPY]XWSUHSURFHVRUXOSHUPLWHLGHFODUDUHDDQXPLWRU]RQHGHFRGDVWIHOvQFkW
HOHVDILHFRPSLODWHvQDQXPLWHFRQGL LLFXPDUIL
QXVXQWGHILQLWHDQXPLWHFRQVWDQWHVDXYDULDELOHORFDOH
FRGXOHVWHXWLOGDUSHQWUXGHSDQDUH

GRUHVFVLPSLHGLFIRORVLUHDXQRUIXQF LLGLQELEOLRWHFvQWUXFkWVXQWUHVFULVHGH
RULFLQH VXSUDvQFUFDUHDIXQF LLORU
6LQWD[DJHQHUDOD

([HPSOX
SHQWUXKHDGHUHSHUVRQDOHV]LFHPILLHUXOWHVWK
#ifndef __TEST
#define __TEST
.......
corpul
.......
#endif
Sau pentru depanare
#if DEBUG
printf(.......);
#endif
Sau daca nu am definite ni;te valori speciale
#ifndef M_PI
#define M_PI 3.1415....
#endif.

 SUH]HQWDUH D UHJXOLORU GH ED]

6FXUW

GH FDUH WUHEXLH LQXW FRQW OD SURLHFWDUHD XQHL DSSOLFD LL

6WLO GH SURJUDPDUH QHUHFRPDQGDW

6WLO UHFRPDQGDW

3XQHUHD GHFODUD LLORU FX H[WHUQ vQ ILLHUXOF

 H[WHUQ

5HIHULULOH OD IXQF LHYDULDELO


6H SXQ vQ ILLHUHOH KHDGHUK

$FFHVXO FRPXQ OD GDWH vQWUH IXQF LL UHDOL]DW SULQ

$FFHVXO FRPXQ VH IDFH SULQ WUDQVIHU GH DUJXPHQW

YDULDELOH JOREDOH

)RORVLUHD GH GDWH JOREDOH F QG QX H FD]XO

&UHDUHD D QXPHURDVH IXQF LL FX VFRSXUL VSHFLDOH

 IU

8WLOL]DUHD QXPHORU GH ILLHU VDX YDULDELO

 FX FRQWH[WXO

 SULQ GHFODUDUH GH WLS VWDWLF

6H UH]ROY

&UHHDUHD XQRU SULPLWLYH JHQHUDOH


)RORVLUHD GH QXPH FDUH VH DSURSLH GH SVHXGRFRG

OHJ WXU

)RORVLUHD FRQVWDQWH QXPHULFH

6H GHILQHVF QLWH QXPH SW DFHOH YDORUL

)RORVLUHD JRWR

)RORVLUHD VWUXFWXULORU GH FRQWURO D IOX[XULORU

6FULUHD GH FRG UHGXQGDQW

6H IRORVHVF IXQF LL vQ FD]XO vQ FDUH VH REVHUY


DFHODL OXFUX

You might also like