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:
/* 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; }
int tupla_plus_yksi(int *pArvo) { *pArvo = *pArvo + 1; return 2**pArvo; }