[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: C-cko



	Neman zkusenosti se StormC, jen s Borland C++  a linuxovskym GCC, ale 
ono to bude vsude podobne.

> Zdravim,
> ptam se jakozto absolutni laik a prosim o jednoduchou odpoved.
> 
> Co je to, kdyz naka firma uvolni zdrojaky? To jako v C-cku? Kdyz ano,
> tak proc je tech souboru vzdycky hodne a ne jen jeden, kterej se

	Protoze zdrojaky k vetsimu programu maji nekolik desitek (i set) tisic 
radku a kdyby to vsechno bylo v jedinem souboru, tak se v tom nikdo 
nevyzna, je si predstav to prohlizeni pomoci PgUp a PgDown. Proto je 
zvykem rozdelit zdrojak do vice soboru, kde v kazdem jsou soustredeny 
funkce pro urcitou oblast (v jednom treba nacteni nebo ulozeni souboru 
na disk, v jinem nastaveni konfigurace, atd.)
	Dalsi duvod vyplyva z podstaty cecka, ktere umoznuje definovat 
staticke globalni promenne, ktere jsou viditelne ve vsech funkcich 
definovanych v ramci jednoho souboru. Je dost dobre, aby globalni 
promenna byla videt jen tam, kde chci a ne uplne vsude, kde ji mohu 
omylem zmenit, takto se dosahuje urcite modularity programu..

> prevede? Proc sou tam a co znamenaji koncovky jako .c .o .link .debud
>  .h .fd atd? To se pak extra nacte treba do StormC a tam se nejak
> prevedou odkazy na amiga-format? To, ze to vse v StormC zkompiluju,

	.c je zdrojak v cecku, .h je hlavickovy soubor (v podstate taky 
zdrojak), ktery zpraidla obsahuje deklarace a behem kompilace se 
direktivou #include automaticky vlozi do kompilovaneho souboru - mas 
jednak "standardni hlavickove soubory", ktere jsou dodany s
kompilatorem a obsahuji deklarace standardni knihovny funkci, dalsi si 
muzes vytvorit sam. Treba potrebujes v peti souborech mis stejne 
deklarace - mas dve moznosti, bud to petkrat opises nebo do das do 
zvlastniho souboru .h a ten pomoci #include vlozis do tech peti 
souboru.
	.o bude zrejme obektovy modul, kompilace v ceku probiha dvoufazove 
(jako u vetsiny jazyku), napred se provede vlastni kompilace, kdy se z 
kazdeho zdrojoveho souboru (ke kazdemu .c vznikne samostatny .o) 
vyrobi "objektovy modul" - uz je to strojak, ale nema vyreseny odkazy 
na externi funce a neni schopen spusteni. Pote nasleduje linkovani, kdy 
se vyresi odkazy na externi funkce a vsechny .o se slepi do jednoho 
exe, je takto mozne spojit objektove moduly z ruznych jazyku, dost 
casto se pouziva spojeni cecka a assembleru (program, ktery provadi 
druhou fazi se jmenuje linker, vetsina modernich prekladacu ovsem 
obe faze provede najednou, v pripade potreby daji oddelit, tomuto 
programu se pak poknekud nepresne rika kompilator, byt je to zaroven i 
linker - teto nepresnoti se dopoustim i ja v tomto textu).

	Abys nemusel tohle delat rucne, vetsina prekladacu obsahuje 
prostredky, ktere tuto cinnost automatizuji (v Borlandu je to projekt, 
v GCC makelink, tady by to mohl byt onen soubor .link). Zpravidla je to 
soubor, ktery obsahuje sadu predpisu, co a kde se ma kompilovat a s cim 
slinkovat. Vetsinou to podporuje i automaticke zjistovani zavislosti, 
kdy se pri zmene v jednom zdrojovem souboru provede kompilace jen 
tohoto souboru a nekompiluje se cely projekt (coz muze byt casove dosti 
narocne).

> znamena, ze to prevedu do assembleru?
> 
	Ne do assembleru, ale do strojoveho kodu, assembeler je jazyk ktery 
usnadnuje zapis programu ve strojovem kodu. Dost kompilatoru ma 
ovsem moznost kompilovat pres assembler, kdy ti jako meziprodukt 
poskytne i assemblerovsky zdrojak a muzes se podivat, jak to ten 
kompilator vlastne dela. 

                              Ales Zika
                              Pelhrimov

                              E-mail : Ales.Zika@pel.cb.ds.mfcr.cz