Elõre: Feltételes
fordítás Fel: Szimbólumok
és makrók Vissza: Szimbólumok
és makrók
Megjegyzések
-
A következõ szimbólumok nem szerepelhetnek sem #define,
sem #undef direktivákban:
__STDC__ __FILE__ __LINE__
__DATE__ __TIME__
Két szintaktikai egységet (token-t) egybe lehet forrasztani
egy makró definíciós részében, ha ##
választja el õket egymástól (és bármelyik
oldalon esetleges szóközök). Az elõfeldolgozó
eltávolítja az esetleges szóközöket és
a ## jelet, és egyesíti a két különálló
szintaktikai egységet. Ilyen módon lehet változókat
konstruálni. Például a #define VAR(I, J) (I ##
J) makródefinició esetén a VAR(x, 6)
szövegbõl x6 lesz a kifejtés után.
A makrók definíciós részében lévõ
beágyazott makrók kifejtése a külsõ makró
kifejtésekor történik meg, nem pedig a definíciójakor.
Ennek leginkább olyankor van jelentõsége, amikor egy
beágyazott makrót #undef direktívában
is használunk.
A # karakter elhelyezhetõ bármely makróargumentum
elõtt, ilyen módon azt sztringgé alakítva.
A makró kifejtésekor a #arg alakú paraméterhivatkozások
az "arg" alakkal helyettesítõdnek. Például
a
#define PRINTVAL(value) printf(#value "=%d\n",value)
makródefinicó esetében a
int counter = 0;
...
PRINTVAL(counter);
programrészletbõl
int counter = 0;
...
printf("counter" "=%d\n",counter);
lesz. A fenti printf utasítás pedig ekvivalens a
printf("counter=%d\n",counter);
utasítással.
Más implementációkkal ellentétben a BORLAND
C++ elõfeldolgozója nem végez paraméterhelyettesítést
sztringeken és karakterállandókon belül.