bevallásának
A mechanizmus megtérülési 3. fejezetben leírt Mint bizonyára emlékeznek rá, azt mondja, hogy ez az állítás két fontos célokra. Először is, amely azonnali kilépés funkciót, azaz a kénytelen végezni a program a vezérlést a kódot, hogy hívják ezt a funkciót. Másodszor, ez az állítás lehet használni, hogy vissza értéket. A következő szakaszok leírják, hogy pontosan hogyan használhatja a bevallását.
Visszatérve a függvény
A funkció megszüntetheti végrehajtását, és elvégzik a visszatérés a hívó programba kétféleképpen. Az első módszer akkor használható, ha az utolsó nyilatkozatot a funkció megfelel a záró kapcsos zárójel (>). (Természetesen ez csak zsargon, mert ebben tárgykód merevítő ott!) Például pr_reverse () függvény a következő program egyszerűen megjeleníti a húr fordított sorrendben Szeretem C hőmérsékleten, majd visszaadja a vezérlést a hívó programban.
Ha a karakterlánc jelenik meg a képernyőn, pr_reverse function () „nem tesznek mást”, így ő visszatér oda, ahol ez volt az úgynevezett.
A gyakorlatban azonban nem olyan sok funkció segítségével csak oly módon, hogy teljessé. A legtöbb funkció befejezni a nyilatkozatot, amely visszatér - vagy azért, mert akkor vissza kell térnie egy értéket, vagy hogy a kód egyszerűbbé és hatékonyabbá működését.
A funkció lehet több operátorok. Például, az alábbi program find_substr () függvény a kiindulási helyzetében részkarakterláncként ugyanabban a sorban, vagy visszatér -1, ha alsztringjeként ellenkezőleg, nem található. Ebben a funkcióban két bevallásának egyszerűesíteni kódolás.
Visszatérő értékek
Minden funkció, kivéve azokat, amelyek kapcsolódnak a típus semmis. vissza értéket. Ez az érték jelzi a kifejezést a bevallását. S89 szabvány lehetővé teszi a végrehajtását egy return utasítást kifejezéstelen a függvény belsejében, az a fajta, amely eltér az űrt. Ebben az esetben mindegy van egy visszatérő tetszőleges értéket. De ez az állapot, hogy enyhén szólva, nem jó! Ezért, a Standard C99 (és C ++), feltéve, hogy a funkció egy eltérő típusú, szintén void. cserébe nyilatkozat szükséges meghatározni a visszatérési érték. Azaz szerint C99, ha bármely funkció meghatározza, hogy egy értéket ad vissza, akkor a belsejében ez a funkció minden bevallásának meg kell jelennie. Azonban, ha a funkció egy eltérő típusú, szintén érvénytelen. végéig tart (azaz, amíg a záró zárójel), visszatér egy tetszőleges (előre megjósolható a szempontból a fejlesztő programot!) értéket. Bár nincs szintaktikai hiba, ez egy komoly hiányosság, és az ilyen helyzeteket kerülni kell.
Ha ez a funkció nem úgy nyilatkozott, hogy a típus semmis. lehet használni, mint egy változó a kifejezést. Ezért minden Az alábbi állítások helyességét:
Az általános szabály az, hogy a függvény hívás nem található a bal oldalon a értékadó operátor. kifejezés
Ez rossz. Ha a C fordító bármely program talál egy kifejezés, akkor jelölje meg a hibás, és a program nem fordul le.
A program funkcióit használhatja a három faj. Az első típus - egy egyszerű számítással. Ezek a funkciók vannak kialakítva, hogy végre műveleteket érveiket, és visszaküldi a kapott értéket ezeket a műveleteket. Computing függvény olyan függvény a „tiszta”. Példaként említhetők standard könyvtár funkció sqrt () és sin (). amely kiszámítja a négyzetgyökét, és szinusz az érvelését, ill.
A második típusba funkciók információkat és ad vissza értéket, amely azt jelzi, hogy a feldolgozás sikeresen megtörtént. Egy példa egy könyvtár funkció fclose (). amely lezárja a fájlt. Ha a záró művelet sikeresen befejeződött, a függvény 0 és hiba esetén EOF visszatér.
A funkció az utóbbi, a harmadik típus nem kifejezetten visszatérési értékeket. Tény, hogy ezek a funkciók tisztán eljárási, és nem értékek nem ad ki. Ennek egyik példája a exit (). amely leállítja a program végrehajtásához. Minden funkció, amely nem ad vissza értéket be kell jelenteni, mint a visszatérő érték típusú semmis. Deklarálása a függvény visszatérési értéke void típusú. megtiltasz annak használata kifejezést, így megakadályozza a véletlen használatát ennek a funkciónak más célokra.
Néha funkciókat, ami úgy tűnik, hogy valóban nem ad értelmes eredményt, még vissza értéket. Például, printf () számát adja vissza kimeneti szimbólum. Ha lenne egy ilyen program, ami ténylegesen ellenőrzött ezt az értéket, akkor lenne valami különleges. Más szavakkal, bár az összes funkciót, kivéve azokat, amelyek a típus semmis. visszatérési értékek nem kell keresni, hogy használja ezeket az értékeket, bármi is. Gyakran, amikor beszélünk a függvény visszatérési értéke, van egy meglehetősen gyakori kérdés: „Vajon nem szükséges hozzá a visszaadott érték a változó nem az, hogy fog lógni valahol, és hogy ez vezet a jövőben gondot?” A kérdés megválaszolásához, megismételjük, hogy a feladat nem kötelező, és annak hiánya nem okoz semmilyen gondot. Ha a visszatérési érték nem szerepel sem a értékadó operátor, az érték egyszerűen eldobjuk. Megjegyezzük továbbá, hogy a elutasítása nagyon gyakori. Tekintsük a következő programot, mely a mul () függvényt.
Az 1. sor, az érték által visszaadott mul (). rendelt a z változó. A 2. sor, a visszatérési érték van hozzárendelve, de használja printf () függvény. Végül a 3. sorban, a visszatérési érték elvész, mert nem rendelt bármely változó, és nem használjuk részeként egy kifejezést.
visszaad egy pointert
Ahhoz, hogy a funkció vissza mutató, meg kell állapítani, mint a visszatérő egy mutatót a megfelelő típusú. Például az alábbi függvény egy mutatót az első előfordulása egy karaktert, amely hozzá van rendelve egy változó. string s. Ha ez a karakterhez nincs jelen, akkor visszaad egy pointert a sor végét jelző karaktert ( „0”).
Itt van egy kis program, amely a match () függvény.
Ez a program beolvassa az első sort, majd a szimbólumra. Aztán tartotta a szimbólum helyét a keresésben. Ha van egy karakterhez p változó rá fog mutatni, és a program megjeleníti egy vonalat a karakter található. Ha a karakter a karakterlánc nem található, akkor p jelzi a sor végét jelző karaktert ( „0”), ahol a * o képviseli a logikai értéke FALSE (hamis). Ebben az esetben a program egy üzenetet jelenít Symbol nincs.
void függvény
Itt egy példa print_vertical () függvény.