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 20:55 | Komunita

Od 18. do 21. května proběhla v Saint-Étienne Linux Audio Conference 2017. Na programu byla řada zajímavých přednášek a seminářů. Videozáznamy přednášek lze zhlédnout na YouTube. K dispozici jsou také články a prezentace.

Ladislav Hagara | Komentářů: 0
včera 20:44 | IT novinky

Hodnota Bitcoinu, decentralizované kryptoměny, překonala hranici 2 200 dolarů. Za posledních 30 dnů tak vzrostla přibližně o 80 % [reddit].

Ladislav Hagara | Komentářů: 0
včera 17:33 | Nová verze

Po 5 měsících vývoje od vydání verze 0.12.0 byla vydána verze 0.13.0 správce balíčků GNU Guix a na něm postavené systémové distribuce GuixSD (Guix System Distribution). Na vývoji se podílelo 83 vývojářů. Přibylo 840 nových balíčků. Jejich aktuální počet je 5 454. Aktualizována byla také dokumentace.

Ladislav Hagara | Komentářů: 1
včera 17:22 | Nová verze

Po 5 měsících vývoje a 3 týdnech intenzivního testování byla vydána verze 12 open source systému Nextcloud, forku ownCloudu, umožňujícího provoz vlastního cloudového úložiště. Přehled novinek i s videoukázkami v poznámkách k vydání. Pro vyzkoušení je k dispozici demo.

Ladislav Hagara | Komentářů: 2
včera 11:44 | Zajímavý článek

Týden po prvním číslu publikoval Michal Špaček na svých stránkách druhé číslo newsletteru věnovanému bezpečnosti, bezpečnému vývoji převážně webových aplikací a bezpečnosti uživatelů. Věnuje se výpadku Let's Encrypt, únikům dat, bug bounty pro WordPress nebo SQL Injection v Joomla. Zmiňuje také, že Mozilla plánuje z Firefoxu odstranit podporu pro Encrypted Media Extensions (EME) na nešifrovaném HTTP a nadále pro EME vyžadovat HTTPS.

Ladislav Hagara | Komentářů: 0
včera 02:00 | Pozvánky

Ve středu 31. května 2017 od 17:00 proběhne v pražské pobočce SUSE Den otevřených dveří v SUSE. Čekají vás přednášky o live kernel patchingu a nástroji SaltStack. Také se dozvíte zajímavé informace o SUSE, openSUSE, a vlastně všech produktech, na kterých lidé ze SUSE pracují.

Ladislav Hagara | Komentářů: 4
včera 01:00 | Pozvánky

Czech JBoss User Group srdečně zve na setkání JBUG v Brně, které se koná ve středu 7. června 2017 v prostorách Fakulty informatiky Masarykovy univerzity v místnosti A318 od 18:00. Přednáší Tomáš Livora na téma Fault Tolerance with Hystrix. Více informací na Facebooku a Twitteru #jbugcz.

mjedlick | Komentářů: 0
19.5. 23:22 | Zajímavý projekt

Na Texture Ninja je volně k dispozici více než 4 tisíce textur. Autora lze podpořit na Patreonu.

Ladislav Hagara | Komentářů: 0
19.5. 10:22 | Pozvánky

Mozilla.cz zve na MozBeer Prague #2. Druhé setkání Mozilla.cz proběhne 26. května od 18:00 v Praze v Diversion Bistru v ulici Mělnická.

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

Průvodce restauracemi Zomato, jenž v roce 2014 koupil Lunchtime.cz, potvrdil bezpečnostní problém. Odcizeno bylo 17 miliónů záznamů o uživatelích (jména, emailové adresy, osolené hashe).

Ladislav Hagara | Komentářů: 8
Chystáte se pořídit CPU AMD Ryzen?
 (6%)
 (33%)
 (1%)
 (8%)
 (44%)
 (9%)
Celkem 587 hlasů
 Komentářů: 62, poslední 19.5. 01: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.