Funkce vyjadřují dílčí algoritmy — podprogramy.
Chceme-li v programu nějakou funkci použít, musíme ji nejprve deklarovat. Podobně jako v ostatních případech rozlišujeme definiční a informativní deklaraci; informativní deklaraci obvykle nazýváme prototyp. Aby mohl překladač
přeložit volání funkce, stačí, když zná její prototyp; definiční deklarace může být někde jinde.
Obě bychom je mohli popsat takto:
definice.funkce: hlavička_funkce tělo
prototyp: hlavička_funkce ;
hlavička_funkce: deklarační_specifikátorynenep deklarátor_funkce specifikace_výjimeknep
Vzhledem k tomu, že se zabýváme pouze volnými funkcemi, vynechali jsme v popisu hlavičky funkce možnost použití cv-kvalifikátorů, neboť ty lze užít pouze pro metody.
Příklad:
int f1(double, double); void *f2(int); int (*f3()) [10]; long (*f4(char)) ();
Funkce f1() má dva parametry typu double a vrací hodnotu typu int. Funkce f2() má jeden parametr typu int a vrací ukazatel bez doménového typu (tj. void*). Funkce f3() je bez parametrů a vrací ukazatel na pole deseti
hodnot typu int; f4() má jeden parametr typu char a vrací ukazatel na funkci typu long bez parametrů.
Všimněte si, že v deklarátoru funkce stojí vždy bezprostředně za identifikátorem funkce závorky se seznamem formálních parametrů.
Specifikace formálních parametrů v deklaraci funkce se podobá deklaraci proměnných, až na to, že každý formální parametr musíme specifikovat zvlášť a parametry mohou mít pouze paměťovou třídu auto nebo register.
Jména parametrů můžeme za jistých okolností vynechat. Specifikace jednotlivých parametrů oddělujeme čárkami.
Deklarace funkce může také specifikovat výpustku).
Chceme-li deklarovat funkci bez parametrů, použijeme buď klíčové slovo void nebo prázdné závorky. Obě možnosti jsou v C++ ekvivalentní:
int f(); // Obojí znamená v C++ totéž int f(void);
jsou prototypy téže funkce f() bez parametrů.
Specifikace_výjimek specifikuje typy výjimek, které se mohou z dané funkce rozšířit. Má tvar:
specifikace_výjimek: throw() throw( seznam_identifikátorů )