W pewnych językach programowania dzieli się podprogramy na funkcje i procedury:
- Funkcja ma wykonywać obliczenia i zwracać jakąś wartość, nie powinna natomiast mieć żadnego innego wpływu na działanie programu (np. funkcja obliczająca pierwiastek kwadratowy)
- Procedura natomiast nie zwraca żadnej wartości, zamiast tego wykonuje pewne działania (np. procedura czyszcząca ekran)
Przez zwracanie wartości należy rozumieć możliwość użycia
wywołania funkcji wewnątrz wyrażenia. Procedury często też zwracają wartości, ale poprzez odpowiednie parametry.
Podział ten występuje w językach takich jak Pascal i Ada. W pozostałych językach (m. in. w C i C++) nie ma już takiego rozróżnienia i funkcją jest każdy podprogram, niezależnie od tego czy zwraca jakieś wartości i czy ma wpływ na program.
W C++ procedurą nazwali byśmy każdą funkcję typu
void. Oczywiście, jeżeli spełnia ww. warunki.