Koska funktio- aliohjelma palauttaa valmiiksi arvon, voitaisiin matka_a2.cpp:n pääohjelma kirjoittaa myös muodossa:
ohjeet(); kysy_matka(&matka_mm); tulosta_matka(mittakaava_muunnos(matka_mm)); return 0;
Funktioita käytetään silloin, kun aliohjelman tehtävänä on palauttaa vain yksi täsmällinen arvo. Tyypillisiä math.h- kirjaston funktioita on esim. (suluissa olevat eivät ole standardin funktioita):
(abs) acos asin atan atan2 atof (cabs) ceil cos cosh exp fabs floor fmod frexp (hypot) (labs) ldexp log log10 (matherr) modf (poly) pow (pow10) sin sinh sqrt tan tanh
Funktioita käytetään kuten matematiikassa on totuttu:
c = sqrt(a*a+b*b) + asin((sin(alpha)+0.2)/2.0);
kysy_matka ja kysy_mittakaava voitaisiin kirjoittaa myös funktioiksi, ja tällöin niitä voitaisiin kutsua esim. seuraavasti:
matka_km = kysy_matka()*kysy_mittakaava()/MM_KM;
Vaarana olisi kuitenkin se, ettei voida olla aivan varmoja kumpiko funktiosta kysy_matka vai kysy_mittakaava suoritettaisiin ensin ja tämä saattaisi aiheuttaa joissakin tilanteissa yllätyksiä.
Tämän vuoksi pyrimmekin kirjoittamaan funktioiksi vain sellaiset aliohjelmat, jotka palauttavat täsmälleen yhden arvon ja jotka eivät ota muuta informaatiota ympäristöstä kuin sen mitä niille parametrinä välitetään. Eli tavoitteena on se, että funktioiden kutsuminen lausekkeen osana olisi turvallista.
Muut aliohjelmat kirjoitamme siten, että arvot palautetaan osoitteen avulla. Hyvin yleinen C- tapa on kuitenkin palauttaa tällaisenkin aliohjelman onnistumista kuvaava arvo funktion nimessä (vrt. esim. scanf).