[ filmil @ 16.12.2004. 21:40 ] @
Kako da prevedem (kompajliram) program u C-u?

U prethodnih nekoliko dana imali smo više pitanja o prevođenju (nerado koristim: kompajliranju) prvog programa u C-u.

Ovaj primer je za GNU C prevodilac.

Program smeštamo u datoteku hello.c:

Code:
#include <stdio.h>
       
 int main(void) 
 {
     printf("Hello world\n");
     return 0;
 }
       
       


Prevođenje i pokretanje (kuca se tekst iza znaka $):


Code:
filip@cow:~
 $ gcc -o hello hello.c
 filip@cow:~
 $ ./hello
 Hello world
 filip@cow:~
 $
       

Značenje:
gcc - ime GNU C prevodioca
-o hello - naređuje prevodiocu da datoteku koja se dobije prevođenjem nazove hello. Ako se ne navede opcija -o, dobiće se datoteka koja se tradicionalno zove a.out. C i C++ prevodioci se ovako ponašaju na svim Unix sistemima.
hello.c - ime datoteke u kojoj se nalazi program. Ekstenzija za C programe je: .c.
./hello - Pokreće program sa imenom hello u tekućem direktorijumu (./). Vrlo je bitno da ne izostavite tačku i kosu crtu.

Ostale poruke koje govore o sličnoj temi, dobijene pretragom foruma 6:
http://www.elitesecurity.org/tema/5268/0#41465
http://www.elitesecurity.org/tema/13853/0#100401
http://www.elitesecurity.org/tema/34154/0#232778
http://www.elitesecurity.org/tema/61457/0#391142
http://www.elitesecurity.org/tema/72386/0#459690

f
[ veljko77 @ 21.02.2005. 07:20 ] @
Jel neko moze da mi kaze sta znaci linija "int main(void)"
u kodu koji sledi :


Code:


#include <stdio.h>
       
 int main(void) 
 {
     printf("Hello world\n");
     return 0;
 }





... ili sta znaci linija "void main(void)"

U Krausovoj knjizi za C pise da postoji nekoliko "VRSTA" (ako sam se dobro izrazio) glavnih programa. Izmedju ostalog ovo su 2 od tih nekoliko. Neznam sta je time u programu postignuto.

Hvala!
Veljko
[ filmil @ 21.02.2005. 09:22 ] @
Citat:
Jel neko moze da mi kaze sta znaci linija "int main(void)"
.... U Krausovoj knjizi za C pise da postoji nekoliko "VRSTA" (ako sam se dobro izrazio) glavnih programa. Izmedju ostalog ovo su 2 od tih nekoliko. Neznam sta je time u programu postignuto.
int main(void) {...} je definicija funkcije u C-u. (pogledaj odeljak o definisanju funkcija u Krausovoj knjizi.)

Sama deklaracija se ne razlikuje uopšte ni od jedne druge deklaracije funkcije. Međutim, funkcija main je posebna po tome što se ona prva izvršava pri pokretanju programa. U neku ruku možemo da kažemo da je poziva operativni sistem. (Vodi računa da je ovo malo uprošćeno objašnjenje pošto zapravo izvršenje svakog C programa prethodi izvršenje funkcija iz runtime biblioteke koje podešavaju radno okruženje programa).

Zbog toga može da bude malo nejasno kuda putuje ono int i kada i kako ova funkcija može a kada ne može da ima parametre. Zato se dogovorno uzima da funkcija main uvek vraća nekakav celi broj (int) operativnom sistemu. Za nas sada nije bitno kako se taj broj dalje obrađuje. void main(void) i uopšte bilo koja definicija main u kojoj main ne vraća int nije u skladu sa važećim standardom jezika C pa ih ne treba koristiti. Krausova knjiga je zastarela u ovom pogledu,

Kako bi se obezbedilo prenošenje parametara u program, main ima još nekoliko varijanti deklaracije (sve su pomenute u Krausovoj knjizi), od kojih je najčešće korišćena:

Code:
int main(int argc, char *argv[])
 
 
Ona omogućava prenos parametara iz operativnog sistema u program. Ako je potrebno da program ima ulazne parametre, onda ćemo koristiti ovaj oblik. Ako program ne uzima parametre, onda je int main(void) dovoljno.

f
[ Voodoo @ 21.02.2005. 18:07 ] @
Takodje postoji i

Code:
int main(int argc, char *argv[], char *envp[])


koji u envp upisuje niz environment varijabli (moze nekom zatrebati).
[ PeRuN_RoJs @ 18.09.2005. 15:39 ] @
Logicnije je:
Code:
void main ()
{
printf ("\nHello world!\n");
}

prevodjenje u visual microsoft studio 6-u nije nikakav problem
[ PeRuN_RoJs @ 18.09.2005. 15:41 ] @
Ne vidim razlog za koricsenje f-ja (mislim klasicnih) kada je u pitanju glavni program, tj. main
[ kurt.hectic @ 18.09.2005. 16:06 ] @
razlog je sto nije dozvoljeno standardom: http://www.eskimo.com/~scs/C-faq/q11.12.html
[ dejandj @ 18.09.2005. 16:41 ] @
I, takodje pogledaj DevC, Lepo pise da main MORA DA BUDE int (nista void).

Standard...