LINUXSOFT.cz
Nazwa użytkownika: Hasło:     
    CZ UK PL

> Komentarze :: článek C/C++ (25) - Funkce s proměnným počtem parametrů

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
více výstupních bodů funkce 27.9.2005 10:58 camlost
|- Re: více výstupních bodů funkce 27.9.2005 11:09 Jan Němec
|- Re: více výstupních bodů funkce 27.9.2005 13:26 Aleš Hakl
| L Re: více výstupních bodů funkce 1.11.2005 14:13 camlost
L Re: více výstupních bodů funkce 3.10.2005 17:39 Jakub Jochec
Spis nez nejake flames by me osobne zajimalo toto... 3.10.2005 17:59 Jakub Jochec
|- Re: Spis nez nejake flames by me osobne zajimalo toto... 3.10.2005 18:17 Aleš Hakl
L Re: Spis nez nejake flames by me osobne zajimalo toto... 4.10.2005 08:08 Jan Němec
Jde to udělat líp ? 17.10.2005 19:08 Michal marwin
  |- Re: Jde to udělat líp ? 17.10.2005 23:49 Aleš Hakl
  L Re: Jde to udělat líp ? 1.11.2005 14:18 camlost
Tylko zarejestrowani użytkownicy mogą dopisywać komentarze.
> Szukanie oprogramowania
1. Pacman linux
Download: 4850x
2. FreeBSD
Download: 9044x
3. PCLinuxOS-2010
Download: 8541x
4. alcolix
Download: 10916x
5. Onebase Linux
Download: 9631x
6. Novell Linux Desktop
Download: 0x
7. KateOS
Download: 6219x

1. xinetd
Download: 2382x
2. RDGS
Download: 937x
3. spkg
Download: 4692x
4. LinPacker
Download: 9918x
5. VFU File Manager
Download: 3173x
6. LeftHand Mała Księgowość
Download: 7171x
7. MISU pyFotoResize
Download: 2775x
8. Lefthand CRM
Download: 3540x
9. MetadataExtractor
Download: 0x
10. RCP100
Download: 3089x
11. Predaj softveru
Download: 0x
12. MSH Free Autoresponder
Download: 0x
©Pavel Kysilka - 2003-2024 | mailatlinuxsoft.cz | Design: www.megadesign.cz