chtel bych se zeptat jak a kde zapisujete funkce (ve vetsich projektech). v mym predchozich "radobyprogramech" jsem funkce zapisoval v celem zneni (i s telem - tusim ze se tomu rika definice) pred hlavni funkci, pak jsem ale zjistil ze se v tom neda vyznat. proto jsem se rozhodl zacit zapisovat funkce do .h souboru jenomze nevim jestli mam do .h zapisovat i definici nebo pouze deklaraci. pripada mi to totiz hrozne zdlouhave zapisovat do .h souboru seznam funkci ( napr. void Nacti(int a, int b); ) a pak do dalsiho .c souboru psat jeji telo a v poslednim souboru mit "jadro" programu s funkci main() a vsechny tyto soubory includovat. Pri cteni nekterych zdrojovych kodu jsem narazil prave na tento postup a tak se ptam je to vyhodne a hlavne proc. uvazuju ze bych definici psal do .h a pak jen includoval k "jadru". Diky za odpoved :)
Fórum › C / C++
Zapis funkci
Co sa tyka tcojej otazky. Do *.h sa zapisuje len deklaracia. Cele telo sa zapisuje do *.c suboru.
Toto ma viacero dovodov-vyhod ale taky nazakladnejsi je modularita. Asi by bolo najlebsie keby si si nastudoval build proces a potom by ti to bolo jasnejsie. Totizto pri akejkolvek zlozitejsiej veci je vhodne takto program stiepit na mensie casti. Stava sa tak prehladnejsi a samozrejme kompilacia pri kazdej malickej zmene netrva dlho.
Pokusim sa to vyjasnit nejak laicky ale asi to napisem totalne blbo tak ma opravte. Zoberme si priklad kde mame aplikaciu app. Ta je vecsia a pozostava zo subor1.c a subor2.c (plus ich headre). V Subor1.c mas func1() a v subor2 mas func2(). Naprv poviem ako funguje preklad. Totizto najprv sa skompiluju *.c subory ktore vytvoria akusi binarku(v unix like systemoch *.o). Potom sa zoberu tieto binarky a zlinkuju sa do jedneho celku, do vysledneho spustitelneho programu.
Teraz si predstav tvoj pripad. Ze vsetko je to v subor_all.c. Cize ked zmenis func1(), tak je potrebne prekompilovat subor_all.c .Tam je vsak aj func2() ktoru si vsak nemenil, cize sa prekompiluje zbytocne, nakoniec sa linkuje.
Teraz si zober ze to mas rozdelene.Cize zmenis func1(), staci ti len prekompilovat subor1.c pretoze k subor2.c mas uz skompilovane subor2.o a nebola tam ziadna zmena.Nakoniec sa to len zlinkuje dokopy.
Ono to pri tomto priklade nejak nenaberie vyznam, ale ked mas projekt ktory je fakt velky, a ktoreho kompilacia trva cca 10 minut a toto by si mal absolvovat pri zmene kazdej malej zmeny, to by ta porazilo. Ale to je len jeden z dovodov. Dalsi je ako si napisal prehladnost, akasi modularita programu.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Zápis WITH - DO — založil Petr
Pomoc s funkcí — založil Crlda
Proměnná ve funkci — založil sturm
Problém s funkcí — založil mistr jirka
Moderátoři diskuze