next up previous contents
Elõre: Operátorok Fel: Kifejezések Vissza: Kifejezések

Elsõdleges kifejezések

Elsõdleges kifejezés az azonosító - feltéve, hogy már teljeskörûen deklaráltuk. Típusa a deklarációnak megfelelõ. Elsõdleges kifejezés továbbá minden konstans, az ott tárgyalt megfelelõ típussal, beleértve a sztringkonstansokat is, amelyek típusa karaktertömb. Bármely kifejezés ( ) zárójelek közé zárva szintén elsõdleges kifejezéssé válik, örökölve az adott kifejezés típusát.

Elsõdleges kifejezés az õt közvetlenül követõ [ ] zárójelek közt álló kifejezéssel együtt elsõdleges kifejezést alkot. Más szóval, egy tömbváltozót indexelve szintén elsõdleges kifejezést kapunk, aminek a típusa az adott tömb alaptípusa lesz. Ebben az összefüggésben a [ ] a benne szereplõ indexelõ kifejezéssel együtt az ún. indexelõ operátor, amelynek használata formailag hasonlít a 1.4.7 pontban említett [ ] tömbtípust képzõ operátor megjelenésére, de míg ez utóbbi a fordító programot arra utasítja, hogy az alaptípusból tömbtípust hozzon létre, addig az indexelõ operátorral egy tömbtípusú tárolási egység egy, az alaptípusba tartozó elemét jelöljük ki.

A függvényhívás is elsõdleges kifejezés, ami formailag egy elsõdleges kifejezés az õt közvetlenül követõ ( ) zárójelek közé zárt, vesszõvel elválasztott kifejezéslistával (aktuális paraméterlistával) együtt. A függvényhívás eredményének típusa az adott függvény deklarált visszatérõ típusa. A tömbindexeléshez hasonlóan úgy is felfoghatjuk a dolgot, hogy a postfix ( ) függvényaktivizáló operátort alkalmazzuk az adott függvénytípusú tárolási egységre, és ennek a mûveletnek az eredménye az adott függvénytípus deklarációja szerinti alaptípus, azaz a függvény visszatérési értékének a típusa lesz. (Itt megint csak a 1.4.7 pontban elmondottakra utalunk.) Ez a gondolkodásmód összhangban van azzal, hogy egy azonosító mindig elsõdleges kifejezés. A függvénynév is elsõdleges kifejezés: önmagában leírva definició szerint a függvény címét jelenti. Ezzel mást nem lehet csinálni, mint értékül adni egy, az adott típusú függvényre mutató pointernek (lásd 1.9.8), vagy a függvényaktivizáló operátort alkalmazni rá, miáltal az adott függvénybeli programkód az aktuális függvényparaméterekkel lefut.

A függvényhívás paramétereiben szereplõ minden float érték automatikusan double, minden signed char, vagy signed short int érték int, minden unsigned short int, vagy unsigned char érték unsigned int típusúvá konvertálódik. (Ez a fajta konverzió, mint majd látni fogjuk, ennél sokkal általánosabb a kifejezések kezelésénél). Itt válik világossá, hogy függvény paramétereit miért értelmes gépi szó méretû int-re választani (ha garantáltan elférnek 16 bitben), és hasonlóan, miért célszerûtlen egy paramétert float típusúnak deklarálni.

Elsõdleges kifejezések továbbá a struktúrák és unionok (lásd késõbb) mezõire vonatkozó kiválasztó operátorok (a . és a ->) alkalmazásával nyert olyan kifejezések, amelyeknél az operátor baloldalán elsõdleges kifejezés, jobboldalán pedig azonosító áll. Ezeket részletesebben a 1.8-es pontban fogjuk ismertetni.

Elsõdleges kifejezésre példaként tekintsük elõször a pelda.c-ben elõfordulókat. Ezek a következõk:

            c, getchar(), (c = getchar()), EOF, isupper(c),
            tolower(c), toupper(c), putchar(c)
Tekintsünk néhány példát az elõzõ részben található deklarációkat érvényben levõnek tételezve fel:
             read(0, p, 0x100), p, hiba[8], vektor, szerda
Ezek típusai sorrendben int, char *, char, float[ ], int, int. (Típust úgy kell megadni, mintha deklarálnánk egy ilyen típusú változót, majd elhagyjuk belõle az azonosítót. Az így kapott szerkezetet absztrakt deklarátornak nevezzük.)


next up previous contents
Elõre: Operátorok Fel: Kifejezések Vissza: Kifejezések