Obsah

Funkce main

Funkce main představuje tzv. vstupní bod programu - funkce, která se při spuštění programu vykonává jako první. Ukončením funkce main se ukončí i celá aplikace. Pokud není funkce main ve fázi linkování aplikace přítomna (viz ccpp:kompilace), skončí tento proces s chybou a spustitelná aplikace nebude vytvořena.

Ukázka minimální funkce main

int main()
{
  return 0; // indikujeme EXIT_SUCCESS pro OS
}

Pokud chceme aby byla aplikace plně korektní měla by funkce main končit voláním příkazu return s parametrem 0 v případě bezchybného konce aplikace, a nebo nenulovou hodnotou v případě chyby. Vrácené číslo je pak předáno operačnímu systému, který ho interpretuje jako chybu a lze s ním dále pracovat (výhodné pro skripty). Pokud příkaz return v moderních implementacích vynecháme, je automaticky předána hodnota 0.

Poznámka: Volání příkazu return okamžitě ukončí celou funkci a v případě funkce main i celou aplikaci.

Ukázka signalizace chyby

int main(int argc, char* argv[])
{
  int x;
 
  printf("Zadejte odpoved na zakladni otazku zivota, vesmiru a vubec\n");
  scanf("%d", &x);
 
  if (x != 42)
    return 1; // chybove ukonceni aplikace
 
  return 0;
}

Úplná funkce main s argumenty aplikace

Každé aplikaci lze při jejím spuštěním zadat argumenty. Tyto argumenty jsou pak předány do speciálních parametrů funkce main jako vektor (seznam) řetězců. Parametr argc představuje počet argumentů, parametr argv[] je pole řetězců obsahující samotné argumenty. Každá aplikace dostane při spuštění automaticky alespoň jeden argument - její název.

Ukázka předávání argumentů

$ ./mojeAplikace argument1 argument2 

Ukázka apliakce, která vypíše všechny argumenty

int main(int argc, char* argv[])
{
  for (int i = 0; i < argc; ++i)
  {
    printf("argv[%d]: %s\n", i, argv[i]);
  }
 
  return 0;
}

Vícevláknové aplikace

Funkce main běží v hlavním vlákně aplikace. Pokud dojde k ukončení funkce main, jsou ukončena i všecha ostatní vlákna. Jestliže chceme počkat na dokončení ostatních vláken, je třeba na každé z nich počkat využítím funkce thread::join (C++11; cpp reference), nebo pthread_join (POSIX; man stránka).