next up previous contents
Elõre: Cím szerint nyilvántartott típusú Fel: Új elemek a C++-ban Vissza: Új elemek a C++-ban

Alternatívák a #define direktíva helyett

A 1.3-as részben megismerkedtünk a #define preprocesszor utasítással. Ez a direktíva három célt szolgál:

Az utóbbi két alkalmazást célszerû elválasztani a fordításvezérlõ funkcióktól. Ahhoz, hogy ezt megtehessük, a C++ két lehetõséget kínál.

Az egyik a const kulcsszó használata. (Megjegyzendõ, hogy a const kulcsszó az ANSI C-nek is része, lásd 1.4.6-os szakaszt.)

Minden olyan konstanst, amit nem fordításvezérlésre akarunk használni, célszerû a const deklarációjú valtozóknak kezdeti értékül adni. Ezek után a const deklarációjú váltzókat ugyanúgy használhatjuk, mint a jól megszokott #define konstansokat, azzal a nem mellékes különbséggel, hogy mentesülünk a #define konstansok feldolgozásokor történõ egyszerû szöveghelyettesítés esetleges kellemetlen mellékhatásaitól. Ezáltal biztonságosabbá válhatnak forrásprogramjaink.

A const módosító szóval deklarált változók mellett a felsorolt típusú (enum) változók alkalmazása is hatékony alternatíva a #define direktíva helyett. C++ az enum típust kicsit másképp értelmezi, mint a hagyományos C. A különbség az, hogy míg a hagyományos C az enum és int típusokat kompatibilisnek tekinti, addig a C++ a különbözõ enum típusokra vonatkozólag is szigorú típusellenõrzést végez. Így például egy enum típusú változónak nem adhatunk int típusû értéket.

A #define-nal történõ makródefiníciókkal szemben hatékony alternatívát jelentenek az ún. inline (sorok közötti) függvények. Röviden: egy inline függvény elég kis terjedelmû ahhoz, hogy helyben (in situ), a függvényhívás helyére behelyettesítve le lehessen fordítani. Ebben a tekintetben egy inline függvény olyan, mintha makró lenne, azaz a függvényhívásokkal járó adminisztrációra nincs szükség. Rövid, egy-két soros függvények esetében ez sokkal hatékonyabb, sokkal olvashatóbb megoldást jelent, mint a makró-definíció. Az ún. explicit inline függvények deklarálására szolgál a C++ inline kulcsszava. (Az implicit inline deklarációról az ún. függvénymezõk kapcsán egy késõbbi fejezetben lesz szó.)

Tehát az inline függvények a hagyományos C elõfeldolgozó #define direktívájával definiálható makrókhoz hasonlítanak. Annyival fejlettebbek a makróknál, hogy egy ilyen függvény meghívása nem pusztán szöveghelyettesítés, hanem a definíció szerint generált kód másolódik be a hívások helyére, így a makrókkal kapcsolatban említett mellékhatások jelentkezésének is kisebb a veszélye. Végül az explicit inline függvény-definícióra álljon itt egy példa:

            inline int abs(int x)
            {
               return (x < 0) ? -x : x;
            }

next up previous contents
Elõre: Cím szerint nyilvántartott típusú Fel: Új elemek a C++-ban Vissza: Új elemek a C++-ban