Zapis funkci – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Zapis funkci – C / C++ – Fórum – Programujte.comZapis funkci – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Earl Cash0
Věrný člen
12. 11. 2007   #1
-
0
-

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 :)

Nahlásit jako SPAM
IP: 217.197.150.–
Oh my goodness, shut me down! Machines making machines. How perverse. (C-3PO)
Reklama
Reklama
sn3d0
Věrný člen
12. 11. 2007   #2
-
0
-

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.

Nahlásit jako SPAM
IP: 213.151.208.–
shutdown -h now
Earl Cash0
Věrný člen
12. 11. 2007   #3
-
0
-

dekuju za radu... :)

Nahlásit jako SPAM
IP: 217.197.150.–
Oh my goodness, shut me down! Machines making machines. How perverse. (C-3PO)
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 200 hostů

Podobná vlákna

Ukazatel na funkci — založil Jirka

Příkaz if ve funkci — založil etro00

Argumenty ve funkci. — založil survik1

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý