Nemusíte vidět celé tělo funkce, abyste věděli, jak ji zavolat. Vše, co potřebujete, je slib. Tento příslib je funkční prototyp.
V moderním C je předběžné prohlášení prototypů povinné. Sděluje kompilátoru přesně, co funkce očekává: název, typy argumentů a návratovou hodnotu. Bez toho fungujete naslepo. A v C slepota něco stojí.
Skrytá cena za neprovedení prototypu
Zvažte tento fragment kódu. Vypadá nevinně. Sestavuje se. Provádí se.
Zde add výslovně vyžaduje dvě celá čísla. Ale jen jeden přenáší hovor. Přísný kompilátor by byl pobouřen. Mnoho lidí to nedělá. Ve výchozím nastavení předpokládají, že návratový typ je int a zcela ignorují neshody parametrů.
Výsledek? Špatné odpovědi. Tiché poškození dat. Trávíte hodiny hledáním brouka, který vám zíral do tváře na druhém řádku.
Je to proto, že výchozí zděděné chování jazyka C očekává, že funkce bez prototypů vrátí int. Pokud skutečná funkce vrátí float, kompilátor bude bity interpretovat nesprávně. Prototyp to řeší. Vymáhá smlouvu.
Vymáhání smlouvy
Umístěte prototyp na začátek. Někde před prvním hovorem.
Kompilátor nyní hlásí chybu. Ví, že add vyžaduje dva argumenty. Odmítá sestavit hovor s nevhodnými argumenty. Ušetříte hodiny ladění.
Starý styl vs moderní C
Kompilátory bez ANSI jsou úplně jiný příběh. Umožňují použití prototypů, ale s výhradou. Seznam parametrů musí být prázdný.
To sdělí kompilátoru jméno a návratový typ. O argumentech nic neříká. Nedochází k žádné kontrole chyb. Jste zpět na začátku.
Moderní C (standard ANSI) vyžaduje v prototypu explicitní typy. Tím se odstraní nejednoznačnost. Detekuje neshody typu. Odhaluje absenci argumentů. Odhaluje vše.
Praktické kroky
- Refactor bubble sort. Přesun logiky do funkce. Deklarujte prototyp. Předejte pole a velikost explicitně.
- Isolace vstupu Vytvořte samostatnou funkci pro vstup uživatele. Nezaměňujte „hlavní“. Deklarujte prototyp. Otestujte to.
Nejde o body stylu. Jde o korektnost.
Prototyp je smlouva poskytnutá kompilátorem. Rozbijte to a sestavení se nezdaří.
Možná se divíte, proč je to důležité, pokud váš kód funguje. To je důležité, protože chyby při běhu se opravují obtížněji než chyby při kompilaci. Chyba kompilace vás zastaví. Runtime chyba je skrytá v produkci.
Rozdíl mezi spolehlivým a křehkým programem často spočívá v těch pár řádcích na začátku. Nenechte si je ujít.
Kompilátor vám pomůže. Poslouchejte ho.















