Rešeno: možemo li napisati program bez glavnog u c

Za početak, kao iskusnog programera koji ima dubinsko znanje u C programiranju, često su me pitali da li je moguće napisati program u C-u bez korištenja glavne funkcije. Odgovor je da, moguće je i objasnit ću vam kako to funkcionira. Određeni prevodioci kao što je GCC, dozvoljavaju ovo, i to je fascinantno udubljenje u fleksibilnost i mogućnosti C programiranja. Međutim, ovaj potez se smatra nestandardnim. Zašto se onda javlja ova radoznalost? To je zato što se tradicionalno kaže da izvršavanje C programa počinje od glavne funkcije. Ovo je tačno i savršeno radi za većinu standardnih slučajeva.

Funkcija _start().

Prava početna tačka u većini C programa je zapravo funkcija koja se zove _start(). Obično je ovo bootstrap funkcija koja inicijalizira potrebne resurse i konačno poziva main(). Funkciju _start() kompajler je ugradio u vaš C program, odvojeno od vašeg izvornog koda. Stoga već postoji i tajno radi svoj posao iza kulisa, a da većina programera ne mora znati za to.

Korištenje _start() umjesto main()

Konceptualna tajna pokretanja C programa bez main() leži u donošenju ovoga _start() funkcija u arenu i efikasno ga koristi umjesto main(). To je upravo trik koji nam dozvoljavaju GCC kompajleri. Evo kako:

void _start() {
     // Add your code here
    _exit(0);
}

Obratite pažnju na upotrebu funkcije _exit() na kraju. Ovo je ključno jer ako program ne pozove _exit(), program će se srušiti.

Razumijevanje toka programa

Ovako će program raditi: U standardnim C programima, funkcija _start(), koju obezbjeđuje kompajler, pozivala bi funkciju main(). Međutim, u ovom slučaju, funkciju main() smo zamijenili našom vlastitom funkcijom _start() i ona se direktno izvršava umjesto poziva main(). Funkcija _exit() je sistemski poziv koji će ispravno prekinuti naš program.

Napomena o bibliotečkim zavisnostima

  • Iako je zanimljivo kodirati C program bez main(), postoji nekoliko zastoja. Ova praksa uvodi priličnu količinu bibliotečke zavisnosti u vaš kod. Na primjer, za korištenje funkcije _exit() neophodna je biblioteka unistd.h.
  • Ovo možda neće biti problem u početku, ali ako očekujete da će vaš kod raditi na različitim sistemima i okruženjima, preporučuje se da se držite funkcije main() jer ona donosi viši nivo prenosivosti.

U zaključku, vidjeli smo kako je moguće napraviti jedinstveni C program koji radi bez funkcije main(). Ovo je dokaz fleksibilnosti C jezika. Međutim, važno je napomenuti da je ovo nestandardna praksa, pa koristite diskreciono.

Slični postovi:

Ostavite komentar