Parametry funkce main() a neb - někde to začít muselo ...

Po nadprůměrně obsáhlejch kapitolách o práci se soubory nás čeká oddechovka, protože dnes nás zajímá jediná funkce.

int main(int argc, char *argv[]);


Voláním této funkce někdo vnější zahajuje běh našeho programu. Mohl si o to říct třeba uživatel na příkazový řádce, nebo nás možná spouští jiný program.

argv je pole řetězců, argc říká kolik položek to pole má.

Obvykle jsou v tom poli uloženy jednotlivé parametry zadané na příkazové řádce, hezky jeden za druhým. Pokud jsme tedy náš program spoušteli příkazem

mcopy -x autoexec.bat autoexec.run


pak funkce main bude zavolána tak, že

argc = 4
argv[0] = "mcopy"
argv[1] = "-x"
argv[2] = "autoexec.bat"
argv[3] = "autoexec.run"


Z příkladu je vidět, že v nulté položce můžeme nalézt jméno, pod kterým jsme spouštěni.

Pole ukazatelu argv je ve skutečnosti o jedničku delší - jako zakončovací značka by tam měl být NULL:

argv[argc] = NULL

Ale opatrný programátor na to raději spoléhat nebude.

Stejně tak jako nebude opatrný programátor spoléhat na to, že dostal tolik položek argv co čeká. To znamená, že nepoužije argv[N] dokud se neujistí, že argc je nejmíň N. A pokud se fakt chce vyhnout překvapením, pak i poté raději okontroluje ještě i to, že argv[N] != NULL

Tohle platí dokonce i v případě, že nás zajímá "jen" argv[0]. Nespoléhejte na to, že argc musí být alespoň jedna, protože nemusí. Pokud je nulové tak dokonce může být argv = NULL a pokus použít argv[0] může skončit špatně.

Funkce main může mít i víc než dva parametry. Poměrně častý je
char *envp[]
s pomocí kterého se lze dostat k environmentu programu. Ale jestli takový parametr na konkrétní platformě skutečně dostanem se musí zjistit až v konkrétním případě. Pokud máme k dispozici k dispozici standardní funkce pro práci s environmentem, takže getenv(), je vždycky lepší použít ty.

Ani třetím parametrem to nutně nemusí končit, Apple na některých OS například předává ve čtvrtém parametru informace o OS, ale takovéhle věci už jsou opravdu platformě specifické.

Návratovou hodnotou funkce main ...
... je číslo (int). Opuštění funkce main má stejný efekt jako explicitní ukončení programu pomocí funkce exit(). To znamená, že ve funkci main znamená return N totéž co exit(N).

Návratová hodnota 0 obvykle značí úspěch, zatímco nenulové hodnoty signalizují nějakou formu nečekaného skončení programu.