#include <stdio.h>

/*
    Это программа на языке C и компилировать её надо так:
        gcc 00cfunctions.c


    Известно, что в языке C нельзя создать две функции с одинаковым названием
    Но часто требуется написать функции, которые будут делать похожие вещи, но для разных типов данных.
    Простейший пример -- математические функции для разных численных типов данных

    В языке C эта проблема решается так, что функциям даются немного различающиеся имена


    В данном примере мы создали функции для вычисления абсолютного значения для типов int и double
    Всё работает хорошо, пока мы соблюдаем типы данных и функции

    Но стоит ошибиться и произойдёт сложно выявляемая ошибка

*/

int abs(int a)
{
    if (a < 0)
        return -a;
    else 
        return a;
}

double fabs(double a)
{
    if (a < 0)
        return -a;
    else 
        return a;
}




int main()
{
    printf("%i\n", abs(-5));
    printf("%lf\n", fabs(-5.9));


    double x = abs(-5.9);
    printf("%lf\n", x);
}




/*
    Задача:

        1)  В данном примере переменная x равна ровно 5. Почему так происходит?

        2)  Что будет, если всё-таки назвать 2 функции одинаковым именем и скомпилировать программу с помощью gcc?

*/