Egy kis ráadás...
Egy kis ráadás...¶
Miután megismertük a különböző vezérlési szerkezeteket, az előző fejezetekben azt láthattuk, milyen adattípusokkal rendelkezik a C nyelv, és hogyan tudunk mi magunk is saját típusokat létrehozni.
Sokszor azonban egyéb dolgok is kellhetnek, amik segítik egy program futását, amikkel azok működése, működtetése kényelmesebbé tehető, illetve amiknek ismerete elengethetetlen akkor, amikor programozunk egy adott nyelven. Ezeket próbáljuk összeszedni ebben a fejezetben.
Műveletek precedenciája¶
Számos műveletet megismertünk az eddigiek során. Bár a legtöbbször el is hangzott, azért nem árt, ha összegzésképp megnézzük, hogy ezek a műveletek hogyan viszonyulnak egymáshoz.
A műveletek precedenciája, illetve feldolgozási iránya (asszociativitása) megadja, hogy egy kifejezésen belül a műveletek kiértékelésének mi lesz a helyes sorrendje. Nyilván ezeknek az ismerete sokszor nélkülözhetetlen annak érdekében, hogy a kódunk valóban azt a tevékenységet végezze, ami a szándékunk volt.
A tanult műveleteket, kiértékelési irányukat és precedenciájukat az alábbi táblázatban foglaljuk össze:
Műveletek | Asszociativitás | C operátor |
---|---|---|
egyoperandusú postfix elemkiválasztás mezőkiválasztás függvényhívás |
\(\rightarrow\) | x++ , x-- [] . , -> f() |
egyoperandusú prefix méret típuskényszerítés |
\(\leftarrow\) | + , - , ++x ,--x , ! ,~ , & ,* sizeof (type) |
multiplikatív | \(\rightarrow\) | * ,/ , % |
additív | \(\rightarrow\) | + ,- |
bitléptetés | \(\rightarrow\) | << ,>> |
kisebb-nagyobb relációs | \(\rightarrow\) | <= , >= , < ,> |
egyenlő-nem egyenlő relációs | \(\rightarrow\) | == , != |
bitenkénti 'és' | \(\rightarrow\) | & |
bitenkénti 'kizáró vagy' | \(\rightarrow\) | ^ |
bitenkénti 'vagy' | \(\rightarrow\) | | |
logikai 'és' | \(\rightarrow\) | && |
logikai 'vagy' | \(\rightarrow\) | || |
feltételes | \(\leftarrow\) | ?: |
értékadó | \(\leftarrow\) | = , += , -= , *= , /= , %= , >>= , <<= , &= ,&= ,^= ,|= , |
szekvencia | \(\rightarrow\) | , |
Parancssori argumentumok¶
A C nyelvet támogató környezetekben lehetőség van arra, hogy a végrehajtás megkezdésekor a programnak parancssori argumentumokat vagy paramétereket adjunk át.
Ez sokszor megkönnyítheti a program kezelését, főleg akkor, ha a parancssorban minden olyan információt át tudunk adni, amit korábban csak a felhasználó által való interakció által tudom meg a program.
Amikor az operációs rendszer elindítja a programot, azaz meghívja a main
függvényt, a hívásban két argumentum szerepelhet:
- Az első (általában
argc
névre hallgat) azoknak a parancssori argumentumoknak a darabszáma, amelyekkel a programot meghívtuk. - A második argumentum (általában
argv
) egy mutató egy sztring tömbre, amely a parancssori argumentumokat tartalmazza. Egy karakterlánc egy argumentumnak felel meg.- Megállapodás szerint C-ben az
argv[0]
az a név, amellyel a programot hívták, így azargc
értéke legalább 1. - Számíthatunk arra is, hogy
argv[argc]==NULL
- Megállapodás szerint C-ben az
- Mivel az
argv
egy mutatótömböt megcímző mutató, amain
függvényt többféleképpen deklarálhatjuk.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Elmentve a fenti programot arg.c néven, fordítsuk le és futtassuk a következő módon:
Kimenet
$ gcc -o arg arg.c
$ ./arg alma korte szilva barack palinka
argc = 6
argv[0]: ./arg
argv[1]: alma
argv[2]: korte
argv[3]: szilva
argv[4]: barack
argv[5]: palinka