Rozdíl mezi int main() a int main(void)
Obě funkce int main() a int main(void) mohou na první pohled vypadat stejně, ale v C je mezi nimi podstatný rozdíl, ale v C++ jsou obě stejné.
V C může funkce bez parametru přijmout libovolný počet argumentů. Například funkce deklarovaná jako ‚foo()‘ může v C přijímat libovolný počet argumentů (volání foo(), foo(1), foo(‚A‘,1) nevyvolá žádnou chybu).
#include <stdio.h>void foo(){}int main(){ foo(); foo(1); foo(1,'A'); foo(1,'A',"ABC"); printf("ABC\n"); return 0;}
Výše uvedený kód proběhne bez problémů a nevyvolá žádnou chybu, protože funkce bez parametru může přijímat libovolný počet argumentů, ale v C++ tomu tak není. V jazyce C++ se nám zobrazí chyba. Podívejme se na to.
#include <iostream>using namespace std;void foo(){}int main(){ foo(1); cout << "ABC" << endl; return 0;}
Spuštění výše uvedeného kódu nám dá chybu, protože funkci ‚foo‘ nemůžeme předat žádný argument.
Použití funkce foo(void) však omezuje možnost přijmout libovolný argument a vyhodí chybu. Podívejme se na to.
#include <stdio.h>void foo(void){}int main(){ foo(1); printf("ABC\n"); return 0;}
Výše uvedený kód nám vyhodí chybu, protože jsme použili ‚foo(void)‘ a to znamená, že funkci ‚foo‘ nemůžeme předat žádný argument, jako jsme to dělali v případě ‚foo()‘.
Takže jak foo(void), tak foo() jsou stejné v jazyce C++, ale ne v jazyce C. Totéž platí i pro funkci ‚main‘. Proto je vhodnější použít tvar int main(void), pokud main nebere žádný argument.
Rozdíl mezi int main() a void main() a main()
Stejně jako každá jiná funkce je i main funkcí, ale se zvláštní vlastností, že provádění programu začíná vždy od ‚main‘. Jejím návratovým typem jsou ‚int‘ a ‚void‘. Probereme si tedy všechny tři postupně.
- void main – Norma ANSI říká „ne“ ‚void main‘, a proto lze jeho použití považovat za nesprávné. Člověk by měl přestat používat ‚void main‘, pokud tak činí.
- int main – ‚int main‘ znamená, že naše funkce musí na konci vykonávání vrátit nějaké celé číslo, a to uděláme tak, že na konci programu vrátíme 0. To znamená, že naše funkce musí vrátit nějaké celé číslo. Hodnota 0 je standardem pro „úspěšné provedení programu“.
- main – V jazyce C89 je nespecifikovaný návratový typ standardně int. V jazyce C89 je tedy main ekvivalentní výrazu int main. V C99 to však není povoleno, a proto je třeba použít int main.
Přednostně se tedy používá int main.
.