Функции в C\C++

Често се налага да преизползваме част от код отново и отново в рамките на една програма. Това води до по-труден за четене и разбиране код, по големи програми (от гледна точка на сорс код) и др. В повечето езици за програмиране както и в C\C++ можем да използваме функции за разрешаването на подобни проблеми. За функциите може да се мисли като за подпрограми които могат да бъдат изпълнени (извикани – function call) от основната програма или от друга функция за да изпълнят определена задача.
За да “направим” функция трябва да я декларираме. Функциите имат няколко основни компонента:
тип-на-връщана-стойност име-на функция(аргументи){

тяло-на-функция

}
Тип на стойност на връщане може да е всякакъв вграден или потребителски дефиниран тип познат на програмата (напр. int, double, bool). Существуват функции които не изискват да се връща стойност – тези функции се наричат – void.

Примери:
Функция, която изкарва на екрана Hello World!

void hello_function(){
    cout << "Hello world!" << endl;
}

Функция, която събира две цели числа и връща сборът им като резултат/

int addition(int a, int b){
    return a + b;
}

*return е запазена дума и случи за връщане на желаната стойност от функция. Също return така прекъсва изпъленението на функцията, което позволява използването и и във функции, които не връщат стойност (void). Последното се налага когато се изисква изпулнението на функцията да бъде спряно – напр. след изпълнено дадено условие.

Нека разгледаме една цяла програма и как функциите се извикват. Програмата съдържа функция за пресмятане периметърът на правоъгълник. Извършва се проверка дали страните на правоъгълника са по-големи от 0 (т.е. правоъгълникът съществува) и едва тогава се пресмята пеиметъра и се връща като резултата от изпълнението на функцията. Ако проверката не е вярна тогава функцията връща 0, което може да се използва като индикация за несъществуващ правоъгълник с зададените страни. Функцията се извиква от основната функция main и резултата от нея се изкарва на екрана от cout:

#include <iostream>
using namespace std;
double perimeter(double a, double b){
    if(a > 0 && b > 0){
        return 2*a + 2*b;
    }
    else{
        return 0;
    }
}
int main()
{
    double x,y;
    cin >> x >> y;
    cout << perimeter(x, y) << endl;
    return 0;
}

*Винаги има възможност и стойността, която връща функцията да се присвои на променлива.