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í
×

včera 17:11 | Komunita

Byly zveřejněny videozáznamy přednášek z Fedora 26 Release Party konané 10. srpna v Praze.

Ladislav Hagara | Komentářů: 0
včera 15:33 | Komunita

Přesně před čtyřiadvaceti lety, 16. srpna 1993, oznámil Ian Murdock vydání "Debian Linux Release".

Ladislav Hagara | Komentářů: 3
včera 06:00 | Bezpečnostní upozornění

Ve virtualizačním softwaru Xen bylo nalezeno a opraveno 5 bezpečnostních chyb XSA-226 až XSA-230. Nejzávažnější z nich XSA-227 (CVE-2017-12137) umožňuje eskalaci privilegií a ovládnutí celého systému, tj. správce hostovaného systému se může stát správcem hostitelského systému.

Ladislav Hagara | Komentářů: 1
15.8. 22:00 | Zajímavý projekt

V roce 2013 proběhla na Kickstarteru úspěšná kampaň na podporu otevřeného Dobře temperovaného klavíru (Well-Tempered Clavier). Stejný tým s Kimiko Išizaka spustil před týdnem na Kickstarteru kampaň Libre Art of the Fugue na podporu svobodného Umění fugy.

Ladislav Hagara | Komentářů: 2
15.8. 13:55 | Pozvánky

Spolek OpenAlt zve příznivce otevřených technologií a otevřeného přístupu na 143. brněnský sraz, který proběhne v pátek 18. srpna od 18:00 hodin ve sportovním areálu a restauraci BeachPub Sokolák u Brněnské přehrady aneb v hantecu u Prýglu.

Ladislav Hagara | Komentářů: 0
15.8. 10:55 | Nová verze

Byla vydána (pdf) verze 3 průběžně aktualizované (rolling release) linuxové distribuce Solus (Wikipedie). Ke stažení je v edicích Budgie, GNOME a MATE. Z novinek lze zmínit například podporu snapů. Solus 3 obsahuje Firefox 55.0.1, LibreOffice 5.4.0.3, Rhythmbox 3.4.1 nebo Thunderbird 52.2.1. Edice Budgie a GNOME přichází s GNOME MPV 0.12. Edice MATE s VLC 2.2.6.

Ladislav Hagara | Komentářů: 5
14.8. 21:44 | Nová verze

Po více než roce vývoje od vydání verze 1.0 Microsoft oznámil vydání verze 2.0 platformy .NET Core (GitHub). Přehled novinek v poznámkách k vydání a ve videu na Channel 9.

Ladislav Hagara | Komentářů: 0
14.8. 21:11 | Pozvánky

Před dvaceti lety, 15. srpna 1997, poslal Miguel de Icaza do diskusního listu GTK+ email, který je považován za zahájení projektu GNOME. Linux Desktop Meetup pořádá oslavu ve středu 16. srpna od 19:00 v brněnském Charlie's square.

Ladislav Hagara | Komentářů: 18
14.8. 11:55 | IT novinky
Na šampionátu The International 2017 byl představen bot, který poráží profesionální hráče počítačové hry Dota 2. Bot zatím umí jenom zápasy 1v1. Vývojáři pracují na podpoře 5v5. Jedná se o společný projekt organizace OpenAI a společnosti Valve. Více na stránkách OpenAI a na YouTube. Dle Elona Muska je elektronický sport mnohem komplexnější než šachy nebo go [Hacker News].
Ladislav Hagara | Komentářů: 14
14.8. 05:55 | Nová verze

Byla vydána verze 20.0 a krátce na to opravná verze 20.0.1 svobodného softwaru OBS Studio (Open Broadcaster Software, Wikipedie) určeného pro streamování a nahrávání obrazovky počítače. Přehled novinek i s náhledy a animovanými gify v příspěvku na blogu.

Ladislav Hagara | Komentářů: 0
Těžíte nějakou kryptoměnu?
 (4%)
 (2%)
 (17%)
 (77%)
Celkem 339 hlasů
 Komentářů: 21, poslední 13.8. 09:57
    Rozcestník

    Dotaz: C Makro, složené závorky

    Jardík avatar 7.7.2009 20:56 Jardík | skóre: 40 | blog: jarda_bloguje
    C Makro, složené závorky
    Přečteno: 381×
    Mám strukturu a C makro
    
    typedef struct
    {
        int x;
        const char **pole;
    } Struktura;
    
    #define STRUKTURA(__jmeno__, __x__, __pole__) \
      Struktura __jmeno__ = { __x__, __pole__ };
    
    A nedaří se mi docílit požadovaného výsledku. Zkouším to zavolat takto:
    STRUKTURA(jmeno, 10, {"bla", "bla2", "bla3"})
    
    Ale preprocesor na mě řve, že jsem makru předal 5 argumentů místo 3
    Věřím v jednoho Boha.

    Odpovědi

    7.7.2009 21:17 l4m4
    Rozbalit Rozbalit vše Re: C Makro, složené závorky
    > Ale preprocesor na mě řve, že jsem makru předal 5 argumentů místo 3

    Nu však ano, předal, a to tyto:

    jmeno

    10

    {"bla"

    "bla2"

    "bla3"}

    Preprocesor nerozumí gramatice C, složené závorky pro něj nemají žádný význam, naopak ho lze využít ke zpracování různým způsobem nebalacovaných konstrukcí. Preprocesor rozumí C na úrovni tokenů, takže ho nespletou např. čárky uvnitř řetězce, ale to je vše.
    Jardík avatar 7.7.2009 22:01 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: C Makro, složené závorky
    Hmm ... tak jsem to vyřešil, že jsem pole udělal const char* a budu tam strkat řetězec ve tvaru "bla\0bla\0bla\0", i když to není tak hezké jako předchozí zápis ...
    Věřím v jednoho Boha.
    oroborus avatar 7.7.2009 22:35 oroborus | skóre: 20 | blog: Bulanci
    Rozbalit Rozbalit vše Re: C Makro, složené závorky

    Napisat makro s "neznamym" poctom parametrov nie je problem,

     

    makro:

    #define STRUKTURA(jmeno, x, pole...) Struktura jmeno = { x , { pole } }

     

    sa expanduje ako:

     Struktura jmeno = { 10 , { "bla", "bla1", "bla2" } };

     

    problem je v tom, ze toto kompilator Cecka nezozere:

     
    typedef struct
    {
        int x;
         char *pole[];
    } Struktura_1;

    typedef struct
    {
        int x;
         char **pole;
    } Struktura_2;

    typedef struct
    {
        int x;
         const char *pole[];
    } Struktura_3;

    typedef struct
    {
        int x;
         const char **pole;
    } Struktura_4;

    typedef struct
    {
        int x;
         const char *pole[8];
    } Struktura_5;

    int main()
    {
    /*
        Struktura_1 jmeno = { 10, {"bla", "bla1", "bla2"} };    // nepojde skompilovat
        Struktura_2 jmeno = { 10, {"bla", "bla1", "bla2"} };    // nepojde skompilovat
        Struktura_3 jmeno = { 10, {"bla", "bla1", "bla2"} };    // NEpojde skompilovat
        Struktura_4 jmeno = { 10, {"bla", "bla1", "bla2"} };    // NEpojde skompilovat
    */
        Struktura_5 jmeno = { 10, {"bla", "bla1", "bla2"} };    // pojde skompilovat
    }
    Jardík avatar 8.7.2009 00:17 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: C Makro, složené závorky
    Je to špatný ... já totiž v tý struktuře měl to const char** vícekrát a to tím proměnným počtem argumentů nepořeším a stejně by to teda nevzal kompilátor ... zůstanu teda u toho řešení "s\0ošklivým\0řetězcem\0" :-)
    Věřím v jednoho Boha.
    8.7.2009 08:24 l4m4
    Rozbalit Rozbalit vše Re: C Makro, složené závorky
    Ve standardním C je třeba to dělat následovně:
    typedef struct {
        int x;
        const char **array;
    } Structure;
    
    #define MAKE_STRUCTURE(name, x, array...) \
        const char *name##__array_data[] = array; \
        Structure name = { x, name##__array_data }
    
    MAKE_STRUCTURE(joe, 3, {"foo", "bar", "baz"});
    
    Je nevím, proč by to mělo být lepší než ten kód nenapsat rovnou (a pokud je ho hodně, tak generovat, nebo naopak příslušná data run-time načítat).
    8.7.2009 08:43 l4m4
    Rozbalit Rozbalit vše Re: C Makro, složené závorky
    Plácám nesmysly, to je samozřejmě gccismus. Ve standardním C se variadická makra zapisují pomocí __VA_ARGS__:
    typedef struct {
        int x;
        const char **array;
    } Structure;
    
    #define MAKE_STRUCTURE(name, x, ...) \
        const char *name##__array_data[] = __VA_ARGS__; \
        Structure name = { x, name##__array_data }
    
    MAKE_STRUCTURE(joe, 3, {"foo", "bar", "baz"});
    
    8.7.2009 01:57 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: C Makro, složené závorky
    zkus to volat takto:
    STRUKTURA(jmeno, 10, ((char * []){"bla", "bla2", "bla3"}));
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.

    Založit nové vláknoNahoru

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

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