Při psaní programu se nám může stát následující problém.

#include <stdio.h>

int main()
{
    tisk();

    return 0;
}

void tisk() {
}

Když program spustíme, tak program končí s chybou

prototyp implicit error

Na řádku 6 se snažíme volat funkci tisk, která není definovaná. A na řádku 11 se snažíme definovat funkci tisk znova.

To je způsobeno tím, že před prvním použitím funkce tisk je potřeba funkci tisk definovat. Problém se opraví tím, že přesuneme funkci tisk před funkci main.

#include <stdio.h>

void tisk() {
}

int main()
{
    tisk();

    return 0;
}

Existuje však i ještě jiné řešení. Můžeme definovat prototyp funkce. Prototyp funkce obsahuje návratový typ funkce, její název a parametr. Neobsahuje tedy tělo funkce. Prototyp funkce navíc končí středníkem. Příkladem je

void tisk();

Tímhle dáváme programu najevo, že existuje taková funkce a bude definována až později. V našem programu by to pak vypadalo následovně

#include <stdio.h>

void tisk();

int main()
{
    tisk();

    return 0;
}

void tisk() {
}

Prototypem funkce tisk se nám problém vyřešil. Je nutné nezapomenout na definici funkce včetně těla funkce. Pokud bychom to neudělali a funkci tisk nedefinovali a nechali v našem programu jenom prototyp funkce tisk

#include <stdio.h>

void tisk();

int main()
{
    tisk();

    return 0;
}

Program končí s chybou

missing reference

Na řádku 7 se používá funkce, ale není nikde definovaná.

Volání dvou funkcí navzájem

Prototypy funkcí také řešení situaci, kdy se dvě funkce volají navzájem.

#include <stdio.h>

void tisk_vetsi(int cislo_k_tisku) {
    if (cislo_k_tisku >= 0) {
        printf("Tisknu vetsi\n");
    } else {
        tisk_mensi(cislo_k_tisku);
    }
}

void tisk_mensi(int cislo_k_tisku) {
    if (cislo_k_tisku <= 0) {
        printf("Tisknu mensi\n");
    } else {
        tisk_vetsi(cislo_k_tisku);
    }
}

int main()
{
    tisk_vetsi(-5);

    return 0;
}

Opět zde máme problém, že voláme funkci tisk_mensi předtím, než ji definujeme. Zde si však nepomůžeme, když prohodíme definice funkcí tisk_mensi a tisk_vetsi.

Situaci vyřešíme použitím prototypů

#include <stdio.h>

void tisk_vetsi(int cislo_k_tisku);
void tisk_mensi(int cislo_k_tisku);

void tisk_vetsi(int cislo_k_tisku) {
    if (cislo_k_tisku >= 0) {
        printf("Tisknu vetsi\n");
    } else {
        tisk_mensi(cislo_k_tisku);
    }
}

void tisk_mensi(int cislo_k_tisku) {
    if (cislo_k_tisku <= 0) {
        printf("Tisknu mensi\n");
    } else {
        tisk_vetsi(cislo_k_tisku);
    }
}

int main()
{
    tisk_vetsi(-5);

    return 0;
}

Nyní už program funguje správně.

Odkazy

Následující kapitola: Datový typ číslo

GitHub diskuze k této kapitole

Zpátky na přehled

Předchozí kapitola: Práce s argumenty programu