Jak číst program C: analýza příkazu printf

11

Kód je zdánlivě jednoduchý. Vypadá to jako čtyři řádky. Dělá jednu věc. Zobrazí text na obrazovce. Ale za touto jedinou akcí je strukturovaná smlouva mezi vámi, kompilátorem a operačním systémem. Pochopení této smlouvy je prvním krokem ke skutečnému ovládání toho, co váš počítač dělá, spíše než jen nechat jej ve výchozím nastavení spouštět skripty.

Závislost na knihovně

Proces začíná před provedením jakékoli logiky. První řádek, #include , není kód, který se provede. Toto je instrukce preprocesoru. Obsahuje standardní I/O knihovnu. Bez něj by kompilátor nevěděl, co dělat s příkazy jako printf.

stdio.h znamená standardní vstup a výstup. Zvládá základní operace: čtení z klávesnice (standardní vstup) a zápis na monitor (standardní výstup). Spravuje také textové soubory na disku. V C jsou další knihovny, jako jsou string, time a math, ale stdio je vstupním bodem pro téměř vše. Knihovna je jednoduše předem napsaný kód spojený dohromady, takže nemusíte znovu vynalézat kolo. Nepíšete nízkoúrovňové zpracování paměti pro textový výstup. Připojíte balíček. Ty to používáš.

Vstupní bod

Každý program C musí mít vstupní bod. Toto je funkce int main(). Zde začíná exekuce. Pokud není main, propojení se nezdaří. Program neexistuje.

int před main označuje, co funkce vrátí po dokončení. Závorky jsou prázdné, protože tato verze nebere žádné argumenty. Všechno je zde jednoduché. Ale složené závorky { a } za nimi jsou povinné. Definují blok. Vše uvnitř patří „hlavnímu“. Cokoli mimo je rozsahem této konkrétní funkce ignorováno.

Výstupní mechanismus

Uvnitř bloku najdete příkaz printf. Tady se děje kouzlo. printf odesílá data na standardní výstup. Pro většinu uživatelů to znamená okno terminálu nebo konzole.

Text v uvozovkách je formátovací řetězec. Říká printf, co přesně má zobrazit. Může obsahovat doslovné řetězce, jako je „Hello World“. Dokáže zpracovat escape sekvence, jako je \npro nový řádek. Může také používat zástupné symboly pro proměnné, i když je to na hlubší úrovni. Pokud používáte systém UNIX, příkaz man 3 printf` otevře manuálovou stránku s podrobnými specifikátory formátu. Uživatelé Windows obvykle spoléhají na dokumentaci kompilátoru, ale základní chování zůstává stejné.

Výstupní kód

Poslední řádek je return 0;. Zdá se to triviální. Proč něco vracet? Protože procesy nefungují ve vakuu. Komunikují s shellem, který je spustil.

Výstupní kód 0 signalizuje úspěch. To znamená “žádné chyby”. Nenulová hodnota obvykle označuje poruchu nebo specifický stavový kód. Shell tuto hodnotu zkontroluje po dokončení main. To umožňuje skriptům řetězit příkazy dohromady a spustit další krok pouze v případě, že předchozí byl úspěšný. Toto je podání ruky. Potvrzení, že úkol byl dokončen bez selhání.

Proč je to důležité?

Možná si myslíte, že je to jen standardní kód. To je špatně. Toto je kostra jakéhokoli spustitelného programu, který kdy napíšete v C. Chybné propojení knihovny a nevyřešené chyby odkazů. Pokud zapomenete návratový typ, kompilátor vydá varování