8.5.7 Nimessään arvon palauttavat funktiot
Funktion
arvo palautetaan return - lauseessa. Jokaisessa ei- void -
tyyppiseksi esitellyssä funktiossa tulee olla vähintään
yksi return - lause. void- tyyppisessäkin voi olla
return- lause. Tarvittaessa return- lauseita voi olla
useampiakin:
int suurempi(int a, int b)
{
if ( a >= b ) return a;
return b;
}
Kun return - lause tulee vastaan, lopetetaan HETI funktion
suoritus. Tällöin myöhemmin olevilla lauseilla ei ole
mitään merkitystä. Näin ollen useat return-
lauseet ovat mielekkäitä vain ehdollisissa rakenteissa. Siis
seuraavassa ei olisi mitään mieltä:
int hopo(int a)
{
int i;
return 5; /* Palauttaa aina 5!!! */
i = 3 + a;
return i+2;
}
return- lausetta ei saa sotkea arvojen palauttamiseen osoitteen
avulla. Esimerkiksi:
c-muut\funjaoso.c - sivuvaikutuksellinen funktio
/* funjaoso.c */
#include <stdio.h>
int tupla_plus_yksi(int *pArvo)
{
int vanha=*pArvo; /* Alkuperäinen arvo talteen */
*pArvo = *pArvo + 1; /* Kutsun muuttuja muuttui nyt! eli j = 4 */
return 2*vanha; /* Arvo palautui nimessä nyt! eli i = 6 */
}
int main(void)
{
int i,j=3;
i = tupla_plus_yksi(&j);
printf("i = %d, j = %d\n",i,j);
return 0;
}
- Mitä pääohjelma funjaoso tulostaisi jos aliohjelma
olisikin ollut:
int tupla_plus_yksi(int *pArvo)
{
*pArvo = *pArvo + 1;
return 2**pArvo;
}
- Kirjoita edellisestä tehtävästä molemmista
tupla_plus_yksi - versioista viitemuuttujia käyttävä
versio!