|
|
více výstupních bodů funkce
|
27.9.2005 10:58
camlost
|
... lze ve výukových textech považovat za chybu. |
|
|
Re: více výstupních bodů funkce
|
27.9.2005 11:09
Jan Němec
|
To jako to "if (!i) return 0;" ve funkci suma? No nevím, pokud mluvíme oba o tom samém, tak já to za chybu nepovažuju. Jsem zvědavý, co mi řeknete, až dojde na standardní knihovnu a funkce typu exit :-) |
|
|
Re: více výstupních bodů funkce
|
27.9.2005 13:26
Aleš Hakl
|
Mate k tomu nejaky podpurny argument? Docela by me zajimalo, cim je vice vystupnich bodu funkce tak spatnych. |
|
|
Re: více výstupních bodů funkce
|
1.11.2005 14:13
camlost
|
Ano, něco bych měl, jen nevím, jestli má smysl se bavit s kluky, jejichž jedinou reakcí je něco o středoškolském učiteli. Hmmm. :-/
No nic, omlouvám se, to nebylo na Vás.
Argument:
Představte si, že nemáte k dispozici debugger. Program se chová podivně - např. jednoduchá funkce
double bez_dph(double cena) { return(cena / 1.19);
}
vrací evidentně špatné hodnoty.
Jak budete hledat chybu? Pomocí ladících výpisů. Jakou chybu budete hledat? Nejspíš si někde přepisujete paměť. Jak jí najdete? No, postupoval jsem takhle:
V okolí prvního výskytu chyb jsem funkce vybavil ladícím výpisem ihned po vstupu (obsahoval hodnoty parametrů + nějaké další info) a těsně před opuštěním funkcí, tj. těsně před return (je zřejmé, že obsahoval návratovou hodnotu). Očekával jsem, že okolí chyby najdu podle podezřelých hodnot jednoho či druhého.
Pokud bych měl těch "výstupních bodů funkcí" několik, stala by se správa takového kódu zřejmě trošku nepříjemná.
PS: Tuhle humornou situaci jsem zažil při programování jedné mobilní krabičky. Chybu jsem po několika týdnech skutečně našel - chybná implementace mat. operací v plovoucí řádové čárce. Zdrojáky k systémovým knihovnám bohužel nebyly k dispozici. |
|
|
Re: více výstupních bodů funkce
|
3.10.2005 17:39
Jakub Jochec
|
Vy jste stredoskolsky ucitel programovani ze ano? ;-D
Kdyz jsme u tematu clanku jeden (tedy presneji jedna takova) mi tvrdila ze nejde v C vytvorit funkci s promennym poctem parametru asi tak Vam odpovim :-D. |
|
|
Spis nez nejake flames by me osobne zajimalo toto...
|
3.10.2005 17:59
Jakub Jochec
|
Vzhledem k tomu ze nemam co delat tak sem se po precteni clanku pustil do takove "opicarny" ktera me napadla...
Strucne receno melo by jit o program (presneji receno "opicarnu" ;-)) ) ktery bude nacitat predem neurceny pocet promenych (treba typu int), tento cyklus se ukonci zadanim predem urcene hodnoty a nasledne s nimi prostrednictvim externi funkce bude provadet nejakou zadanou akci (treba jako v clanku - sumu). Jiste kazdeho jiste jako prvni napadne proste pouzit jednoduchy do...while cyklus. Ovsem melo by se jednat o to ze pri behu programu dosadime funkci pocet argumentu, jejich pocet je ve skutecnosti znam az pri behu programu (jako napr pocet promennych v tomto programu).
Jiz jsem se dostal k tomu ze za pomoci makra a operatoru ## vytvarim a nasledne mohu pristupovat k takto vytvorenym promenym (aspon v C nema pro konkretni pripad prilis velky smysl vytvaret pole, jeho realokace potom zbytecne zbidacuje vysledny program). Tusim ze by se dalo provest pomoci makra jehoz vystupem bude retezec dosazeny v podobe carkami oddelenych argumentu dosazenych primo do kodu (jak uz to tak u maker byva ;-) ). Ovsem neustale nemohu prijit na to jak vyresit toto posledni makro... Ma nekdo napad? |
|
|
Re: Spis nez nejake flames by me osobne zajimalo toto...
|
3.10.2005 18:17
Aleš Hakl
|
To posledni makro nelze vyresit nijak, C je kompilovany jazyk ^_^. Nicmene vyresit to lze pomoci jedne ze specialnich funkci gcc, konkretne __builtin_apply, viz kapitola "Constructing Function Calls" v manualu gcc. Nicmene reseni pomoci pole je vyrazne jednodussi. |
|
|
Re: Spis nez nejake flames by me osobne zajimalo toto...
|
4.10.2005 08:08
Jan Němec
|
Jak už tady zaznělo, C se překládá a makra se rozvíjejí při překladu. Pokud velikost dat zjistím až za běhu, navíc až ze speciální hodnoty poslední proměnné, tak je jediné rozumné řešení předat hodnoty do funkce v nějaké datové struktuře (pole, seznam, strom, halda ...). Realokace pole není tak hrozná, pokud ji neprovádím po každám načtení jedné nové proměnné, ale např. alokuji vždy na dvojnásobek stávající kapacity. |
|
|
Jde to udělat líp ?
|
17.10.2005 19:08
Michal marwin
|
Jde nějak udělat fci s porměnným počtem parametrů, bez toho aby se zadával počet parametrů, nebo byl dohodnutý standardní poslední parametr? |
|
|
Re: Jde to udělat líp ?
|
17.10.2005 23:49
Aleš Hakl
|
V C ne (alespoň ne rozumně přenositelně). |
|
|
Re: Jde to udělat líp ?
|
1.11.2005 14:18
camlost
|
Na druhou stranu to zase tak často nepotřebujete. Můžete si třeba pomoci formátovacím řetězcem (jako to dělá printf), nebo můžete počet parametrů získat analýzou dat, která hodláte zpracovat. Záleží na tom, co přesně chcete udělat. |
|
|
|
|
KOMENTARZE
|
Tylko zarejestrowani użytkownicy mogą dopisywać komentarze.
|
|
Szukanie oprogramowania
|
©Pavel Kysilka - 2003-2024 |
maillinuxsoft.cz | Design:
www.megadesign.cz
|