abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:33 | Zajímavý software

    Edison Design Group po více než 30 letech zveřejnil zdrojový kód svého EDG C/C++ front-endu. Ten proslul širokou podporou standardů C++ a kompatibilitou s dialekty kompilátorů od Microsoftu, GNU, Clangu, Sunu a dokonce i s prehistorickým cfrontem. EDG byl použit například v kompilátoru Intel C++ Classic, kompilátoru NVCC od firmy NVIDIA pro platformu CUDA nebo v našeptávači kódu IntelliSense v produktech společnosti Microsoft. Projekt nyní spravuje organizace The C++ Alliance a kód je dostupný pod licencí Apache 2.0, doplněnou o výjimky projektu LLVM.

    AfD 💙 | Komentářů: 0
    dnes 04:11 | Zajímavý projekt

    Pocket Tank je malé kapesní virtuální akvárium postavené na vývojové desce ESP32-S3-Touch-AMOLED-1.8. Na dvoujádrovém mikrokontroléru ESP32-S3 s 8 MB PSRAM a 16 MB flash paměti běží jak simulace akvária, tak i malý jazykový model určující chování rybiček. Lokální model o velikosti 7,56 MB se 14 miliony parametrů vznikl destilací modelu Gemma 4 26B, tedy učitele s 26 miliardami parametrů. Kromě firmwaru pro skutečný modul s AMOLED

    … více »
    AfD 💙 | Komentářů: 0
    dnes 03:55 | Zajímavý software

    Open-source nástroj Jevstiller vytváří (destiluje) malý lokální model, který se průběžně učí z odpovědí komerční služby Jev. Běžné dotazy vyřizuje přímo na vlastním hardware, čímž může řádově zkrátit čas odezvy a snížit provozní náklady díky menšímu využívání zpoplatněného API. Nejisté požadavky Jevstiller posílá do Jevu, rovněž průběžně kontroluje náhodná dvě procenta dotazů Jevem. Pokud se lokální model začne s Jevem rozcházet,

    … více »
    AfD 💙 | Komentářů: 0
    včera 12:00 | Pozvánky

    Konference LinuxDays 2026 proběhne již tento víkend 3. a 4. října v Praze v areálu ČVUT v Dejvicích na FIT. Konference LinuxDays 2026 znamená desítky přednášek a workshopů, zástup zajímavých osobností, místo pro setkání, spoustu nových nápadů a informací a stánky řady různých projektů: Fedora, openSUSE, vpsFree.cz, Mozilla, MacGyver - bastlíři SH, OpenAlt a mnoho dalších. Vstup je volný.

    Ladislav Hagara | Komentářů: 4
    včera 04:33 | IT novinky

    Microsoft oznámil, že WSL kontejnery (WSLC) aneb linuxové kontejnery ve Windows Subsystem for Linux (WSL) jsou již obecně dostupné. Současně popsal jejich architekturu.

    Ladislav Hagara | Komentářů: 0
    29.9. 23:22 | Komunita

    openSUSE Leap 16.1 vstoupil do RC fáze. Nově lze instalovat jako standardní systém (Standard) nebo jako neměnný systém s atomickými aktualizacemi (Immutable). Samostatná neměnná distribuce openSUSE Leap Micro končí.

    Ladislav Hagara | Komentářů: 0
    29.9. 22:22 | Nová verze

    Byl vydán Mozilla Firefox 157.0. S nejvýraznější vizuální proměnou za poslední roky. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 157 bude brzy k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 11
    29.9. 10:33 | IT novinky

    Rodina produktů Raspberry Pi se rozšířila o Raspberry Pi Smart Display Module. Deska pro Raspberry Pi Compute Module 5 se zasouvá přímo do displejů dle specifikace Intel SDM. Cena desky je 30 dolarů.

    Ladislav Hagara | Komentářů: 0
    28.9. 23:44 | Nová verze

    Byla vydána nová verze 2.56.0 distribuovaného systému správy verzí Git. Přispělo 104 vývojářů, z toho 39 nových. Přehled novinek v příspěvku na blogu GitHubu a v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    28.9. 21:22 | Bezpečnostní upozornění

    Hackerská skupina ShinyHunters oznámila průnik do informačních systémů FBI, prostřednictvím zero-day zranitelnosti v platformě Oracle PeopleSoft, kterou úřad využívá mimo jiné pro náborový portál FBIJobs.gov. Útočníci tvrdí, že získali až 3 TB dat o současných i bývalých zaměstnancích a uchazečích o práci. Jako důkaz zveřejnili vzorek přibližně 5 000 záznamů obsahující jména, adresy, telefonní čísla, data narození, čísla

    … více »
    AfD 💙 | Komentářů: 3
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (21%)
     (29%)
     (8%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 2764 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník

    Ukazatele jako parametry funkcí v jazyce C

    10.11.2010 12:02 | Přečteno: 4523× | programování v C

    Chápu, že třeba ukazatel na znak je proměnná, která neobsahuje přímo určitý znak, nýbrž obsahuje adresu, na které ten určitý znak leží. Může také třeba obsahovat adresu prvního člena pole znaků.

    Dokonce ještě (snad) chápu ukazatele na ukazatele na celé číslo (znak apod.). Používá se třeba v případě dvourozměrných dynamických polí.

    Co ale nemůžu pochopit -- to jsou funkce, jejichž parametrem (parametry) je (jsou) ukazatel (ukazatele). Hlavně by mě velmi zajímalo, jaký je rozdíl mezi těmito konstrukcemi:

    int funkce1(char *ret)
    {
      /* Tuhle funkci snad chápu dobře. Když ji zavolám s určitým
         parametrem, tak se vytvoří nový ukazatel, jehož obsahem
         bude stejná adresa na znak jako byla u parametru. */
    
      /* Můžu si tedy dovolit toto: */
      *ret = 'A';
      
      /* Když budu vědět, že se jedná o pole, tak můžu třeba i toto: */
      *(ret + 1) = 'B';
    
      /* Pokud to chápu úplně dobře, měl by to jít i takhle: */
      ret[0] = 'A';
      ret[1] = 'B';
    
      /* Jelikož se v C předává pouze hodnotou, tak tímto
         ztratíme adresu, kterou jsme pouze převzali z parametru,
         parametr to nijak neovlivní: */
      ret = NULL;
    }
    
    int funkce2(char **ret)
    {
      /* Tak toto nemůžu pochopit. Jedná se o ukazatel na ukazatel na znak
         Tzn. že se bude předávat adresa na ukazatel na znak. */
    }
    

    Byl by někdo hodný a poradil mi, jaký je rozdíl mezi funkcemi funkce1() a funkce2()? Tedy hlavně rozdíl mezi "*ret" a "**ret". Předem děkuju.

           

    Hodnocení: 100 %

            špatné • dobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    Luboš Doležel (Doli) avatar 10.11.2010 12:23 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    char** je ukazatel na char*, takže pokud chcete z char** dostat char, musíte dělat * dvakrát. Ale smyslem char** je změnit někde adresu ukazatele. Typicky jde tedy o výstupní argument, který tam třeba zapíše nově vytvořený buffer.
    10.11.2010 12:33 Begleiter | skóre: 47 | blog: muj_blog | Doma
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    smyslem char** je změnit někde adresu ukazatele

    Pokud chceme, aby se změna obsahu ukzatele (tedy kam ukazuje) projevila i vně funkce (tedy jakoby se předávalo odkazem), tak pracujeme s "**ret" (v hlavičce funkce). Díky!

    Josef Kufner avatar 10.11.2010 22:55 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    A nebo se předává do funkce pole řetězců.
    Hello world ! Segmentation fault (core dumped)
    Luboš Doležel (Doli) avatar 10.11.2010 23:41 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Jo, typická ukázka: funkce main :-)
    10.11.2010 12:45 qiRzT | skóre: 14 | blog: U_Marvina
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Zamysli se nad tím, co do té druhé funkce předáváš - nějakou adresu v paměti. Co je na té adrese? Zase nějaká adresa a na téhle adrese je nějaký char.
    typ     char **     char *     char
    adresa: 2008        2004       2000
    data:   2004    ->  2000    ->  'A'
    
    Rozdíl mezi těma funkcema ve volání může být třeba takový:
    char c = 'A';
    char * cp = &c; /*cp == 2000*/
    char ** cpp  = &cp; /* cpp == 2004*/
    
    /*volani se stejnym vysledkem*/
    funkce1(&c);
    funkce1(cp);
    
    /*volani se stejnym vysledkem*/
    funkce2(&cp);
    funkce2(cpp);
    
    
    pokud navíc:
    int funkce2(char **ret)
    {
     return funkce1(*ret);
    }
    
    
    Tak se to všechno bude chovat stejně.
    Důležité je vědět jak problém vyřešit, zbytek zvládne i cvičená opice...
    10.11.2010 14:25 Roger
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    char c = 'A';
    char * cp = &c; /*cp == 2000*/
    
    Ty Cckove komentare tomu zrovna nepomahaji :)
    10.11.2010 15:45 qiRzT | skóre: 14 | blog: U_Marvina
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Hmm, měl jsem tam dát apoň mezery. Takle s C++ komentáři to snad je jasné:
    char c = 'A';
    char * cp = &c;        // cp  == 2000
    char ** cpp  = &cp;    // cpp == 2004
    
    Důležité je vědět jak problém vyřešit, zbytek zvládne i cvičená opice...
    10.11.2010 16:14 Begleiter | skóre: 47 | blog: muj_blog | Doma
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C

    Děkuju moc. Už to chápu.

    10.11.2010 12:48 ____ | skóre: 15 | blog: _
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C

    Nějak nechápu, co na tom chceš ještě vysvětlit. Připadá mi, že v tom hledáš nějakou magii, která v tom není.

    První funkce přebírá ukazatel na znak, druhá funkce přebírá ukazatel na ukazatel na znak. Možná ti pomůže vysvětlení na anglické Wikipedii. A nebo si to zkus načrtnout na papír.

    Ukazatele se dají obecně indexovat jako pole (dokonce i do mínusu), takže *ret ve funkci1 je skutečně to samé jako ret[0] v téže funkci (jak se tu řešilo nedávno, ret[0] a 0[ret], je defakto *((ret) + (0)), což je zas ekvivalentní k *ret). Rozdíl mezi ukazatelem a polem se ukáže v momentě, kdy se pokusíš zjistit jejich velikost.

    A teď jsem tě možná pomátl dočista. :)

    10.11.2010 16:15 Begleiter | skóre: 47 | blog: muj_blog | Doma
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C

    Díky!

    10.11.2010 13:50 CET
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Ano, jazyk C je zrovna jazyk na rozmezi mezi assemblerem/strojakem a vyssim jazykem bez ukazatelu (resp. nahrazenych jinymi konstrukcemi).

    Pokud bys nekdy delal v assembleru, tak bys zjistil, ze je uplne jedno, kolik to ma v C hvezdicek, ale ze je dulezite, jak to interpretujes.

    Prakticky jsou ty hvezdicky jakesi kontroly, co ta promenna obsahuje, takze pokud to blbe pouzijes, tak te bude treba kompiler u prace s char **a varovat, ze s obsahem ukazatele (coz je zase ukazatel) chces pracovat jako s char. Ale fakticky ti to dovoli, stejne jako v assembleru muzes obsah pameti bud vypsat jako znak, nebo to vzit jako adresu a cist neco z te adresy.

    Ve vyssich jazycich pak uz te nezajima, ze "a" ve string a; je vlastne taky ukazatel na znaky (ala char *a), ale pracujes s tim, jakoby sama promenna "a" byla ten string.

    Cili funkce1 bere ukazatel na pole charu, cili na adresu, od ktere zacinaji chary.

    char *a je tedy
    a[1000] -> 'A','B','C','D'...'\0'
    
    Druha funkce2 bere ukazatel na ukazatele na chary, cili od adresy ret mas seznam cisel, ktere udavaji adresy, kde zacinaji jednotlive chary.

    Tady je ale char **a

    a[3000] -> 1000,1200,1400,1600
    1000 -> 'a','a','a','a',...'\0'
    1200 -> 'e','e','e','e',...'\0'
    1400 -> 'c','c','c','c',...'\0'
    
    nebo se pletu?
    10.11.2010 16:18 Begleiter | skóre: 47 | blog: muj_blog | Doma
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C

    Super! Moc děkuju.

    10.11.2010 15:17 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    int funkce1(char *ret)
    {
      /* Můžu si tedy dovolit toto: */
      *ret = 'A';
    }
    ne tak uplne. treba volani funkce1("Foobar"); ti neprojde, protoze retezec je s nejvetsi pravdepodobnosti v casti pameti, ktera se neda menit.

    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    10.11.2010 15:24 kralyk z abclinuxu | skóre: 29 | blog:  
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Tam vypíše warning, protože "Foobar" je, afaik, const char*.
    Nicméně přeloži to a pak vzniká rizoto SIGSEGV.
    rADOn avatar 10.11.2010 17:00 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    C prekladac to dovoli, protoze se nemeni ukazatel ale pamet na kterou ukazuje. C++ to nedovoli.
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    10.11.2010 17:27 kralyk z abclinuxu | skóre: 29 | blog:  
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Mně to přeložil i g++... ale nevim...
    pavlix avatar 11.11.2010 03:56 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    C prekladac to dovoli, protoze se nemeni ukazatel ale pamet na kterou ukazuje. C++ to nedovoli.
    Takhle použitý const právě naopak znamená, že se *nesmí měnit obsah té paměti.

    * Mnohé překladače pouze varují.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    10.11.2010 16:43 Radek Hladik | skóre: 20
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Upřímně řečeno, tohle je v C jeden z nejdůležitějších momentů (a pro mně i jeden z největších důvodů, proč C nesnáším). Při programování v C se budete velmi často setkávat s konstrukcemi typu adresa pointeru na pointer a pod. A především i s přetypováváním pointerů, tedy funknce může dostat pointer buď na char nebo int (dejme tomu). Pak má jako parametr pointer na void (netypový pointer) a podle potřeby si pointer přetypuje. A pro jistotu se předává ne pointer na void, ale pointer na pointer na void, aby to šlo změnit.

    Ještě lepší je, když se posílá pointer na pointer na void, ten se přetypuje na nějakou uživatelskou struct, tam se očekává polovina věcí už vyplněná, zbytek se nějak v rámcí funkce dopočítá a vše se vrátí jako nový pointer :-) A přidáme si do toho makra, která sice mohou být úžasná, ale zároveň i megaultrahumusná a vznikne dobrý chaos... Například práce s ASN.1 v OpenSSL je naprosto "úžasná". Zavoláte jedno makro (od kterého není pořádný popis v dokumentaci) a ono to udělá asi milión volání funkcí, přetypovávání a já nevím čeho všeho. Definice makra není pořádně k dispozici, protože je nějaká hromadná, či jak se to jmenuje atd...

    Nu, to jsem se ale nechal trochu unést, v principu jsem chtěl říct jen to, že tahle práce s pointery je v C alfou a omegou všeho a je potřeba jí perfektně ovládát... Až pak budete luštit/tvořit konstrukce typu (sc_path_t *) &(env->file_ref), budete to sakra potřebovat...
    10.11.2010 16:50 kralyk z abclinuxu | skóre: 29 | blog:  
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Ne všichni píší pod gtk :-D
    (a freetype2 a libavcodec a ... a ... :-()
    Grunt avatar 10.11.2010 17:36 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    No jo, ale vem si, že i přes to, že mplayer polovinu času nedělá nic jiného než že někde přesouvá pointery z libav*, ffmpegu, a jiných obalovacích vrstev jak je rychlý. Dovedeš si představit ho napsaný v něčem jiném? (krom komplet Assembleru…i tak ho tam už není málo). Např. stack některých C++ aplikací, to je fakt dílo. Proti nim je i debugovaní kernelu slabé máslo.
    Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
    10.11.2010 18:18 kralyk z abclinuxu | skóre: 29 | blog:  
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Jo, to je pravda, mplayer je hodně rychlý.
    Ale třeba takové VLC je taky (z většiny) v C a přitom je děsně pomalý...
    Grunt avatar 10.11.2010 18:27 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Tam je totiž těch obalových vrstev ještě jednou tolik.
    Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
    Luboš Doležel (Doli) avatar 10.11.2010 22:04 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Pomalý v čem? :-)
    11.11.2010 01:14 kralyk z abclinuxu | skóre: 29 | blog:  
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    V přehrávání.
    Na notebooku s omezeným výpočetním výkonem se to pozná; VLC má o dost níž strop HD videí, které je schopno plynule přehrát...
    David Watzke avatar 11.11.2010 16:18 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    To není pravda obecně, třeba na Intelu když používám VA API, tak mi VLC přijde lepší. Problém MPlayeru je hlavně postupný (mírný) rozjíždění A/V.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    11.11.2010 20:51 kralyk z abclinuxu | skóre: 29 | blog:  
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Tím Intelem myslíš grafárnu? Tam už funguje aj h264 Vím že dřív šlo jen mpeg2...
    mirec avatar 11.11.2010 09:30 mirec | skóre: 33 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Taký ffmpeg je tiež v C a patrí medzi pomerne pomalé dekódery. MPEG4 AVC prehráva o dosť pomalšie než CoreAVC.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    10.11.2010 16:56 Begleiter | skóre: 47 | blog: muj_blog | Doma
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C

    Děkuju za názor.

    10.11.2010 16:59 qiRzT | skóre: 14 | blog: U_Marvina
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    A tos ještě zapoměl na pointery na funkce. S těma makrama jsi mi připoměl moje první setkání s tím, jak jsou v Linuxu (tedy kernelu) řešeny objekty, polymorfismus apod. V tom se vyznat, je taky (aspoň zpočátku) pěkná fuška :-)
    Důležité je vědět jak problém vyřešit, zbytek zvládne i cvičená opice...
    Rezza avatar 10.11.2010 19:03 Rezza | skóre: 25 | blog: rezza | Brno
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    A GLib!
    Grunt avatar 10.11.2010 17:32 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Na to mám jednoduchý trik. Zapnu GDB a mlátím do TABu (umí to něco jako BASH completion) tak dlouho dokuď se tečkama přes struktury a pointery neprobiju až na požadovanou proměnnou. A jako bonus to zahlásí, když je některá proměnná typu void a nejde dereferencovat. Stallman budiž blahořečen.
    Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
    11.11.2010 22:51 tom
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Krome *(ret + 1) = 'A' a ret[1] = 'A' muzete psat i 1[ret] = 'A' ;) scitani je totiz komutativni
    11.11.2010 23:34 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    To je sice hezké, ale je to - kromě znepřehlednění programu - k něčemu dobré?
    Gilhad avatar 12.11.2010 01:33 Gilhad | skóre: 20 | blog: gilhadoviny
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Připravuje nás to psychicky na použití Perlu :)

    (A možná se jednou za čas někde vyskytne nějaká složitější konstrukce, která se tak dá zapsat lépe. A taky má určitý půvab "úplnost" - nevylučovat předem věci, které jsou zdarma, jen pro ně nemám použití zrovna tady a teď, zvláště pokud by to vyloučení něco stálo.)

    Založit nové vlákno • Nahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.