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 18:33 | IT novinky

    Google představil telefon Pixel 10a. S funkci Satelitní SOS, která vás spojí se záchrannými složkami i v místech bez signálu Wi-Fi nebo mobilní sítě. Cena telefonu je od 13 290 Kč.

    Ladislav Hagara | Komentářů: 0
    dnes 16:22 | Komunita

    Byl publikován přehled dění a novinek z vývoje Asahi Linuxu, tj. Linuxu pro Apple Silicon. Fedora 43 Asahi Remix s KDE Plasma už funguje na M3. Zatím ale bez GPU akcelerace. Vývojáře lze podpořit na Open Collective a GitHub Sponsors.

    Ladislav Hagara | Komentářů: 0
    dnes 14:00 | IT novinky

    Red Hat představil nový nástroj Digital Sovereignty Readiness Assessment (GitHub), který organizacím umožní vyhodnotit jejich aktuální schopnosti v oblasti digitální suverenity a nastavit strategii pro nezávislé a bezpečné řízení IT prostředí.

    Ladislav Hagara | Komentářů: 0
    dnes 12:22 | Zajímavý software

    BarraCUDA je neoficiální open-source CUDA kompilátor, ale pro grafické karty AMD (CUDA je proprietární technologie společnosti NVIDIA). BarraCUDA dokáže přeložit zdrojové *.cu soubory (prakticky C/C++) přímo do strojového kódu mikroarchitektury GFX11 a vytvořit tak ELF *.hsaco binární soubory, spustitelné na grafické kartě AMD. Zdrojový kód (převážně C99) je k dispozici na GitHubu, pod licencí Apache-2.0.

    NUKE GAZA! 🎆 | Komentářů: 0
    včera 17:00 | IT novinky

    Podvodné reklamy na sociálních internetových platformách, jako je Facebook, Instagram nebo X, vytvořily loni v Česku jejich provozovatelům příjmy 139 milionů eur, tedy zhruba 3,4 miliardy korun. Proti roku 2022 je to nárůst o 51 procent. Vyplývá to z analýzy Juniper Research pro společnost Revolut. Podle výzkumu je v Česku zhruba jedna ze sedmi zobrazených reklam podvodná. Je to o 14,5 procenta více, než je evropský průměr, kde je podvodná každá desátá reklama.

    Ladislav Hagara | Komentářů: 4
    včera 15:44 | Nová verze

    Desktopové prostředí KDE Plasma bylo vydáno ve verzi 6.6 (Mastodon). Přehled novinek i s videi a se snímky obrazovek v oficiálním oznámení. Podrobný přehled v seznamu změn.

    Ladislav Hagara | Komentářů: 0
    včera 03:22 | Nová verze

    Czkawka a Krokiet, grafické aplikace pro hledání duplicitních a zbytečných souborů, byly vydány ve verzi 11.0. Podrobný přehled novinek v příspěvku na Medium. Od verze 7.0 je vedle frontendu Czkawka postaveného nad frameworkem GTK 4 vyvíjen nový frontend Krokiet postavený nad frameworkem Slint. Frontend Czkawka je už pouze v udržovacím módu. Novinky jsou implementovány ve frontendu Krokiet.

    Ladislav Hagara | Komentářů: 25
    včera 02:00 | Zajímavý článek

    Jiří Eischmann na svém blogu publikoval článek Úvod do MeshCore: "Doteď mě radioamatérské vysílání úplně míjelo. Když jsem se ale dozvěděl, že existují komunity, které svépomocí budují bezdrátové sítě, které jsou nezávislé na Internetu a do značné míry taky elektrické síti a přes které můžete komunikovat s lidmi i na druhé straně republiky, zaujalo mě to. Když o tom přede mnou pořád básnili kolegové v práci, rozhodl jsem se, že to zkusím taky.

    … více »
    Ladislav Hagara | Komentářů: 4
    16.2. 22:55 | Nová verze

    Byla vydána verze 0.5.20 open source správce počítačových her na Linuxu Lutris (Wikipedie). Přehled novinek v oznámení na GitHubu. Instalovat lze také z Flathubu.

    Ladislav Hagara | Komentářů: 0
    16.2. 12:44 | IT novinky

    Peter Steinberger, autor open source AI asistenta OpenClaw, nastupuje do OpenAI. OpenClaw bude převeden pod nadaci a zůstane otevřený a nezávislý.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (19%)
     (6%)
     (0%)
     (11%)
     (27%)
     (3%)
     (4%)
     (2%)
     (12%)
     (26%)
    Celkem 899 hlasů
     Komentářů: 25, poslední 3.2. 19:50
    Rozcestník

    Dotaz: Redefinování makra v C++

    7.4.2013 15:58 blorg
    Redefinování makra v C++
    Přečteno: 552×
    Zdravím, na začátku definuji makro a v průběhu ho potom potřebuju redefinovat, ale tak, aby měl hodnotu nějaké proměnné:
    #define MACRO 5
    
    ...
    
    int var = 10;
    
    #undef MACRO
    #define MACRO var
    
    
    Nejsem si teda jistej, jestli to vůbec jde... Díky

    Odpovědi

    7.4.2013 16:59 lofcek
    Rozbalit Rozbalit vše Re: Redefinování makra v C++
    No ide .. preco by neslo. Len neviem, ci to robi presne to, co si predstavujete. Makra sa totiz len rozvinu na text a az ten sa potom kompiluje. Cize namiesto #define MACRO var, mozete rovno pouzivat len var a urobi to to iste.

    A zmenit hodnota makra - to sa samozrejme da, len na citatelnosti to neprida. Ono vo vseobecnosti sa odporuca vyhybat sa makram a pouzit ich len tam, kde si je clovek uplne isty, ze to musi byt.
    7.4.2013 17:16 blorg
    Rozbalit Rozbalit vše Re: Redefinování makra v C++
    No, var můžu použít ale nebudu mít úplnou jistotu.. a const var nemůžu vůbec
    7.4.2013 17:20 potato
    Rozbalit Rozbalit vše Re: Redefinování makra v C++
    Ještě jednou: nejdřív se expandují makra, pak se teprve zdrojový kód kompiluje. Použití makra povede k identickému výsledku jako napsat do daného místa zdrojovéko kódu var. A to je taky ta jediná úplná jistota, kterou máš.

    Dost nejasné naopak je, jak si vlastně představuješ, že makra fungují.
    7.4.2013 17:34 blorg
    Rozbalit Rozbalit vše Re: Redefinování makra v C++
    Jasně, já jsem akorát myslel že je dobré je třeba použít namísto proměnných, protože makra mohou být jakoby konstantní, dokud je zase nepředefinujeme. Konstantní proměnná nejde předefinovat vůbec.
    7.4.2013 18:06 potato
    Rozbalit Rozbalit vše Re: Redefinování makra v C++
    Úplně nerozumím, proč bys měl mít ve zdrojovém textu části závisející na pojmenování proměnné a navíc ji muset předefinovávat při jedné kompilaci. Možná to chce popsat pořádněji, o co se snažíš.

    Jedna možnost je to, co píše níže Ivan. Pokud potřebuješ zakompilovat do jednoho objektu více jakýchsi variant kódu, tak použij šablony. To ale podle všeho neděláš.

    Pokud se snažíš o to, aby ti preprocesor nahradil v kódu MACRO literálem 10, když to nemáš definováno na úrovni preprocesoru, nýbrž tak pouze inicializuješ proměnou, tak tohle z principu nejde.
    7.4.2013 17:54 Ivan
    Rozbalit Rozbalit vše Re: Redefinování makra v C++
    hmm nevim ceho presne potrebujes dosahnout, ale nesly by na to pouzit sablony?

    neco jako
    template<char * context, int i>
    class Macro
    {
    enum { value = i};
    }
    
    template<<int i>
    class Macro<"kontext1">
    {
    enum { value = 10};
    }
    
    
    popripade jeste by sly pouzit namespaces.
    namespace Kontext1
    {
      enum makro { value = 10 };
    }
    namespace Kontext2
    {
      enum makro { value = 5 };
    }
    
    a pak uz jen:
    using namespace Kontext1;
    
    7.4.2013 19:33 blorg
    Rozbalit Rozbalit vše Re: Redefinování makra v C++
    Vlastně jde o to, že je makro defaultně předdefinované, ale uživatel má možnost ho za běhu změnit. A na hodnotě makra potom závisí deklarování jiných proměnných - kvůli tomu ho chci použít.
    #ifdef MAKRO 5
    int a = 0;
    
    #elif MAKRO 3
    int a = 1;
    
    #endif
    
    A jediný problém je, že nevím, jak makro předefinovat, aby mělo hodnotu nějaké proměnné
    stativ avatar 7.4.2013 19:40 stativ | skóre: 54 | blog: SlaNé roury
    Rozbalit Rozbalit vše Re: Redefinování makra v C++
    Jediný problém je v tom, že to tak prostě nejde. Jak už ti tu někteří už několikrát řekli, makra se expandují ještě před kompilací, takže o proměnných neví naprosto nic.
    Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
    7.4.2013 19:42 blorg
    Rozbalit Rozbalit vše Re: Redefinování makra v C++
    Takže na tohle si prostě můžu nechat zajít chuť. Zkusím to vyřešit jinak.
    8.4.2013 02:30 ::: | skóre: 14 | blog: e_lama
    Rozbalit Rozbalit vše Re: Redefinování makra v C++
    Kdyz to potrebujes za behu menit tak z toho proste udelej (ne-konstantni) promennou:
    int MACRO = 5;
    
    ...
    
    MACRO = 3;
    
    12.4.2013 12:21 Nikola Pajkovský | skóre: 16
    Rozbalit Rozbalit vše Re: Redefinování makra v C++
    takle urcite ne
    Save the whales. Feed the hungry. Free the mallocs
    8.4.2013 03:00 Logik
    Rozbalit Rozbalit vše Re: Redefinování makra v C++
    Zkus si najít něco o návrhovym vzoru dependency injection. Dělat todle "na globální" úrovni je "prasečina", ať už se to pokusíš vyřešit makrem (což z principu nejde) nebo globální proměnou (což by sice šlo, ale goto začátek věty :-)).
    9.4.2013 20:37 blorg
    Rozbalit Rozbalit vše Re: Redefinování makra v C++
    jenže problém je v tom, že potřebuju udělat podmínku ještě před funkcí, a to prostě jde pokud vím tak jen s makrem
    9.4.2013 22:11 kuka
    Rozbalit Rozbalit vše Re: Redefinování makra v C++
    Nepotrebujes udelat "podminku pred funkci", potrebujes resit nejaky realny problem. Vetsina jazyku zadne makro nema a problemy se tam resi. Popis co potrebujes vecne, ne technicky, udelat a jiste se najde vhodne reseni.
    12.4.2013 13:01 Nikola Pajkovský | skóre: 16
    Rozbalit Rozbalit vše Re: Redefinování makra v C++
    makra v jazyce C expanduji ve smlyslu, kde je vyskyt tokenu MAKRO, vloz obsah tela MAKRO. Makro muze byt pouzito jako pojmenovani konstany na rozumny nazev (pojmenovani bitu v bitmask), prejmenovani funkce, vytvareni funkce (dokonce umi i vracet hodntou), pro obecne generovani symbolu a pro podmineny preklad.
    
    #define MS_NOSEC        (1 << 28)
    
    static void foo(void)
    {
         printf("%d\n", MS_NOSEC);
    }
    
    preprocesor vyexpanduje vsechny makra a vlozi jejich obsah na misto jmnena makra. vysledny kod pro preklad bude vypadat takhle
    
    ...
         printf("%d\n", (1 << 28));
    ...
    
    z toho plyne i tvuj problem. #define MACRO var vyexpanduje na symbol var nebo jinimy slovy, prejmenuje symbol var na MACRO
    
    #define MACRO 1
    
    static void foo(void)
    {
         printf("%d\n", MACRO);
    
    #undef MACRO
    #define MACRO var
         printf("%d\n", MACRO);     
    }
    
    se po preprocesoru stane
    
    ...
         printf("%d\n", 1);
         printf("%d\n", var);
    ...
    
    Jedine, kdy se kod prelozi je, kdyz var bude deklarovane. V tomhle pripade to nutne musi byt promnenna. Vytvareni takoveho kodu vede pouze a jedine k chybam a necitelnosti. Timhle zpusobem to opravdu nepouzivej. A ono, predefinovani makra se opravdu deje, ale musi to mit svuj smysl. Makra jsou uzitecna, dobra, ale opatrne na ne.
    
    /*
     * max() macros that also do strict type-checking
     */
    #define max(x, y) ({                           \
           typeof(x) _max1 = (x);                  \
           typeof(y) _max2 = (y);                  \
           (void) (&_max1 == &_max2);              \
           _max1 > _max2 ? _max1 : _max2; })
    
    
    #define gen_localtime(name)                           \
            static inline int localtime_##name(time_t *t) \
            {                                             \
                    struct tm *lt = localtime(t);         \
                    if (!lt)                              \
                            die_errno("localtime");       \
                                                          \
                    return lt->tm_##name;                 \
            }
    
    gen_localtime(mday);
    
    Save the whales. Feed the hungry. Free the mallocs

    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.