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 12:00 | Nová verze

Po cca 3 týdnech od vydání Linux Mintu 18.3 s kódovým jménem Sylvia a prostředími MATE a Cinnamon byla oznámena také vydání s prostředími KDE a Xfce. Podrobnosti v poznámkách k vydání (KDE, Xfce) a v přehledech novinek s náhledy (KDE, Xfce). Linux Mint 18.3 je podporován do roku 2021.

Ladislav Hagara | Komentářů: 0
včera 12:55 | Nová verze

Byla vydána verze 17.12.0 KDE Aplikací (KDE Applications). Přehled novinek v kompletním seznamu změn a na stránce s dalšími informacemi. Aplikace, které nebyly dosud portovány na KDE Frameworks 5, byly z KDE Aplikací odstraněny.

Ladislav Hagara | Komentářů: 27
včera 03:00 | Komunita

Na Humble Bundle lze získat počítačovou hru Company of Heroes 2 (Wikipedie, YouTube) běžící také v Linuxu zdarma. Speciální akce končí v sobotu v 19:00.

Ladislav Hagara | Komentářů: 0
včera 02:00 | Zajímavý software

Christian Kellner představil na svém blogu projekt Bolt řešící bezpečnost rozhraní Thunderbolt 3 na Linuxu. Pomocí příkazu boltctl nebo rozšíření GNOME Shellu lze komunikovat s démonem boltd a například zakázat neznámá zařízení a předejít tak útokům typu Thunderstrike nebo DMA.

Ladislav Hagara | Komentářů: 6
včera 01:00 | Nová verze

Po půl roce vývoje od vydání verze 11.0 byla vydána verze 11.1 svobodného softwaru pro vytváření datových úložišť na síti FreeNAS (Wikipedie). Nejnovější FreeNAS je postaven na FreeBSD 11.1. Přehled novinek v příspěvku na blogu. Zdůraznit lze zvýšení výkonu OpenZFS, počáteční podporu Dockeru nebo synchronizaci s cloudovými službami Amazon S3 (Simple Storage Services), Backblaze B2 Cloud, Google Cloud a Microsoft Azure

Ladislav Hagara | Komentářů: 0
14.12. 23:55 | Nová verze

Po dvou měsících vývoje od vydání verze 235 oznámil Lennart Poettering vydání verze 236 správce systému a služeb systemd (GitHub, NEWS).

Ladislav Hagara | Komentářů: 6
14.12. 20:00 | Nová verze Ladislav Hagara | Komentářů: 0
14.12. 19:33 | Pozvánky

Pražská Fedora 27 Release Party, oslava nedávného vydání Fedory 27, se uskuteční 19. prosince od 19:00 v prostorách společnosti Etnetera (Jankovcova 1037/49). Na programu budou přednášky o novinkách, diskuse, neřízený networking atd.

Ladislav Hagara | Komentářů: 0
14.12. 18:11 | Nová verze

Byla vydána verze 2.11.0 QEMU (Wikipedie). Přispělo 165 vývojářů. Provedeno bylo více než 2 000 commitů. Přehled úprav a nových vlastností v seznamu změn.

Ladislav Hagara | Komentářů: 0
14.12. 17:44 | Komunita

Canonical oznámil dostupnost kryptografických balíčků s certifikací FIPS 140-2 úrovně 1 pro Ubuntu 16.04 LTS pro předplatitele podpory Ubuntu Advantage Advanced. Certifikace FIPS (Federal Information Processing Standards) jsou vyžadovány (nejenom) vládními institucemi USA.

Ladislav Hagara | Komentářů: 3
Jak se vás potenciálně dotkne trend odstraňování analogového audio konektoru typu 3,5mm jack z „chytrých telefonů“?
 (8%)
 (1%)
 (1%)
 (1%)
 (76%)
 (14%)
Celkem 997 hlasů
 Komentářů: 45, poslední 1.12. 19:00
    Rozcestník

    Obskurní konstrukce v C++

    29.11. 18:27 | Přečteno: 1945× | C++ | poslední úprava: 3.12. 01:28

    Následující konstrukce jsou v C++ validní a asi nikoho nepřekvapí.
    while (int a = getData()) {
    
    	// kód
    
    }
    
    for (int a = getData(); a; a = getData()) {
    
    	// kód
    
    }
    
    Nicméně tohle už v C++ validní není:
    do (int a = getData()) {
    
    	// kód
    
    } while ((a = getData()));
    
    Takže nás to nutí psát ošklivé konstrukce jako třeba:
    {
    	int a = getData();
    	do {
    
    		// kód
    
    	} while ((a = getData()));
    }
    
    Smyslem je pracovat uvnitř cyklu s hodnotou proměnné a, ale podmínku testovat až na jeho konci. Přitom ale chceme mít rozsah platnosti proměnné omezen na daný cyklus. Že by po podobné konstrukci C++ byla poptávka, můžeme soudit podle dotazů zde a zde.

    Řešením může být následující obskurní konstrukce.
    switch (int a = getData()) do default: {
    
        // kód
    
    } while ((a = getData()));
    
    Případně ji můžeme trochu obfuskovat pomocí:
    #define do(while) switch (while)do default:
    
    A následný kód je najednou validní.
    do (int a = getData()) {
    
        // kód
    
    } while ((a = getData()));
    
    Důležité je, že tento #define neporuší původní syntaxi klíčového slova do v cyklu do-while.

    Ještě dodám, že ty dvojité závorky jsou tam záměrně. Jinak by GCC vypsalo varování:

    warning: suggest parentheses around assignment used as truth value [-Wparentheses]
    

    Pokud se vám takové konstrukce líbí, tak z tohohle a tohohle budete nadšeni.        

    Hodnocení: 67 %

            špatnédobré        

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

    Komentáře

    Vložit další komentář

    29.11. 22:42 Dadam | skóre: 12 | blog: dadamovo
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    Jaké je sdělení blogu? Že v C++ se dá psát jak prase?
    A i B mají svoje výhody a nevýhody. Vyberte si to, co vám vyhovuje víc, a necpěte A tam, kam patří B.
    29.11. 23:03 VM
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    Nevím co koho k čemu nutí, já bych to napsal buď jako
    do {
    ...
    } while( getData() );
    
    případně, pokud bych chtěl ten výsledek, tak
    int a;
    do {
    ...
    } while(( a=getData() ));
    
    30.11. 12:26 prqek | blog: prqek
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    Přesně tohle mě napadlo. A když chci omezit platnost a, tak to celé zabalím do {}. Sice nad tím může taky kdekdo kroutit hlavou, ale pořád lepší než ta podivnost se switchem, kterou jsem snad ještě nikdy neviděl.
    30.11. 12:27 prqek | blog: prqek
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    Tak koukám, že tam tahle varianta vlastně je.
    30.11. 12:33 finn | skóre: 42 | blog: finnlandia | 49° 44´/13° 22´
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    Tahle konstrukce nebude dělat co má, protože ani v jednom případě se s návratovou hodnotou nedá pracovat uvnitř cyklu (což jsem pochopil, že je cíl) a co hůř, ve druhém případě uvnitř cyklu bude proměnná a definovaná, ale během první iterace nebude mít definovanou hodnotu!
    Užívej dne – možná je tvůj poslední.
    DaBler avatar 1.12. 01:14 DaBler | skóre: 13 | blog: dabler | Brno
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    Přesně tak. Uvedl jsem to raději přímo do textu.
    30.11. 02:34 Petr
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    Moje oblíbená je
    a=a;
    která nejen že není syntaktickou chybou, ale pokud si implementujete vlastní rovnítko, tak s ní musíte počítat. Na druhou stranu tomuto výrazu můžete přiradit nějaký speciální význam.
    30.11. 10:40 Kojot
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    Nicméně tohle už v C++ validní není:
    do {
    
    	// kód
    
    } while (int a = getData());
    
    A k čemu je tato konstrukce dobrá? Proměnná "a" vznikne až v podmínce u while na konci bloku, takže se nemůže použít uvnitř, a zanikne při opuštění cyklu.
    30.11. 12:43 stepan
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    +1 Autor asi nema paru, jak takovy vyraz funguje...

    while (int a = getData()) {

    // kód

    }

    Je moc uzitecna konstrukce, obdobne jako:

    if (int a = getData()) { ... }

    A za tohle bych programatora zabil:

    switch (int a = getData()) do default: {

    // kód

    } while ((a = getData()));

    Blog prispevek naprosto onicem. C++ ma milion dalsich vlastnosti, ktere by si zaslouzili hate, ale tohle zrovna ne.
    DaBler avatar 1.12. 01:21 DaBler | skóre: 13 | blog: dabler | Brno
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    Nevznikne, protože tento kód se nepřeloží.
    1.12. 09:53 Kojot
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    Už to vidím. Místo abyste se chytil za nos, tak jste dodatečně upravil svůj text:
    Nicméně tohle už v C++ validní není:
    do (int a = getData()) {
    
    	// kód
    
    } while ((a = getData()));
    Jen pro info. Toto se také nepřeloží :D.
    DaBler avatar 1.12. 10:01 DaBler | skóre: 13 | blog: dabler | Brno
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    Vždyť to nad tím máte napsané.
    1.12. 10:19 Kojot
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    Já tam nevidím zmínku o tom, že došlo přepsání původního textu, a tudíž že moje reakce je na původní text.
    30.11. 13:32 Semo | skóre: 44 | blog: Semo
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    3. varianta ma nijak neuraza. Na rozdiel od 4.
    If you hold a Unix shell up to your ear, you can you hear the C.
    30.11. 16:15 MadCatX
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    Obskurní konstrukce? To by se to taky mohlo napsat takto:
    #include <iostream>
    #include <functional>
    
    int glob = 10;
    
    template <typename TData>
    void do_loop(const std::function<TData ()> &getter, const std::function<void (TData&)> &worker)
    {
    	TData data = getter();
    	do {
    		worker(data);
    	} while ((data = getter()));
    }
    
    int main()
    {
    	int i = 65;
    
    	do_loop<int>([&]() { return glob--;}, [&](int &d){ std::cout << i + d << "\n"; });
    
    	return 0;
    }
    
    Jinak ten zápis s dvojím voláním getData() mi přijde úplně normální...
    30.11. 16:19 MadCatX
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    Obskurní konstrukce? To by se to taky mohlo napsat takto: Jinak ten zápis s dvojím voláním getData() mi přijde úplně normální...
    Myslím tu třetí možnost s do-while zabaleným scopu.
    DaBler avatar 1.12. 01:12 DaBler | skóre: 13 | blog: dabler | Brno
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    Pěkný kód ;-)
    oryctolagus avatar 1.12. 11:18 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    Obávám se, že v C++ se dají napsat mnohem obskurnější konstrukce...
    There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
    oryctolagus avatar 1.12. 11:25 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    Osobně mám poslední dobou s C++ problém mít přehled o všech možných kategoriích hodnot - lvalue a rvalue jsem zvládal, C++11 move semantics víceméně taky (ačkoli mi trochu chybí ta jednoduchost/přímočarost move semantics z Rustu), ale těch kategorií tam je už dost, a navíc mají některé jiný význam v C++11 a jiný v C++17... :-/
    There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
    3.12. 12:59 stepan
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    C++ bude zachvili tak komplexni, ze i ani autori jazyka ho nebudou znat cele.. (rekl bych ze uz ani neznaji). No radeji bych hral ruskou ruletu, nez psal parsovaci gramatiku pro C++. Bohuzel zatim neexistuje nic lepsiho (nechci rozjizdet flame, ale na veci co delam ja, tak C++ je stale superior), mozna casem D nebo Rust, ale tyhle jazyky jsou nejak firmami ignorovany.
    oryctolagus avatar 3.12. 18:33 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    Tak to celkem souhlas. Jsem sice fanoušek (a občasný přispěvatel) Rustu, ale nedělám si iluze, že by byl v nějaký suprový pozici. C++ i přes své vady zůstává standardem.
    There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
    Josef Kufner avatar 3.12. 20:11 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    C++ už tak kompexní dávno je.
    Hello world ! Segmentation fault (core dumped)
    3.12. 22:27 Odin
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    1. Chyba neni v pouzitem jazyku, ale v nedostatecne kvalite objektoveho navrhu. Jiste i vas mozek pri zvazeni dostupnych moznosti jazyka prijde na validni cestu.

    2. Mozna jednoduse na psani v tomto jazyce nemate. Neni to vase chyba. Ocividne c++ nerozumite. Mozna jste jen junior pracujici za par tisic, ktery ma sanci se jeste veci doucit. Kazopadne se radeji verejne neztrapnujte a bezte delat neco smysluplneho. Treba vas zamestna ten clovek, co zde kdysi psal o fastfoodu.
    DaBler avatar 3.12. 22:48 DaBler | skóre: 13 | blog: dabler | Brno
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    Odine, možná nerozumíte významu slova obskurní. Zkuste použít slovník :)
    6.12. 22:00 .
    Rozbalit Rozbalit vše Re: Obskurní konstrukce v C++
    To je na facku, vole.

    Založit nové vláknoNahoru

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