Un’altra delle astrazioni messe a disposizione dai linguaggi di alto livello sono le funzioni o subroutine che permettono di scrivere porzioni di codice indipendenti, accessibili con il nome della funzione, alla quale possono anche essere passati dei parametri in ingresso e la quale può restituire dei parametri di uscita. In questo modo si può avere una migliore riusabilità del codice.
Ad esempio, in C si può scrivere la funzione max_val che restituisce il massimo tra due valori interi passati come parametri (a e b), come riportato di seguito
max_val(int a, int b) { if (a > b) return a; else return b; }
int maximum, val1, val2; ... maximum = max_val(val1, val2); ...
È comunque opportuno sottolineare che le chiamate ad una funzione utilizzano tempo di CPU, infatti come sarà evidenziato nella sez. 15.4.5.1 per effettuare la chiamata viene salvato lo stato corrente di esecuzione del programma e quindi effettuata la chiamata. Allo stesso modo, al termine della funzione, viene ripristinato lo stato precedente alla chiamata stessa. Il salvatsaggio e ripristino dello stato di esecuzione del programma è un tempo che generalmente può essere trascurato, ma talvolta può essereutile ricorrere ad altre strategie per abbattere i tempi di esecuzione di particolari parti di programmi.