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 19:33 | Zajímavý projekt

    Na Kickstarteru běží kampaň na podporu modulárního otevřeného handheldu Mecha Comet s Linuxem.

    Ladislav Hagara | Komentářů: 1
    dnes 14:00 | Humor

    V nedávno zveřejněné kolekci dokumentů souvisejících s kontroverzním finančníkem a kuplířem Jeffrey Epsteinem se překvapivě objevil i referenční manuál unixového shellu Bash, jedná se o verzi manuálu z roku 2005. Aktuální vydání si lze stáhnout ze stránek GNU.

    NUKE GAZA! 🎆 | Komentářů: 12
    dnes 13:55 | Nová verze

    The Document Foundation oznámila vydání nové verze 26.2 svobodného kancelářského balíku LibreOffice. Podrobný přehled nových vlastností i s náhledy v poznámkách k vydání (cs). Vypíchnout lze podporu formátu Markdown.

    Ladislav Hagara | Komentářů: 0
    dnes 12:22 | Pozvánky

    Co se děje ve zprávách, ví asi každý - válka sem, clo tam, demonstrace na jednu i druhou stranu a bastlíř už má pocit, že se snad ani nic jiného neděje. To by však byl velký omyl a Virtuální Bastlírna je zde jako každý měsíc, aby vytáhla na světlo světa události ze světa vědy a techniky. Připojte se tedy nezávaznému povídání Strahovského MacGyvera! Co se tam bude probírat? PCBWay začalo dělat průhledné plošňáky, MARS končí s výrobou skříněk, FEL

    … více »
    bkralik | Komentářů: 0
    dnes 12:11 | IT novinky

    Guvernérka státu New York Kathy Hochul (Demokraté) plánuje novou legislativu, která by měla omezit výrobu 3D tištěných zbraní. Tento návrh zákona zavádí povinnost pro všechny 3D tiskárny prodávané ve státě New York obsahovat 'software' bránící ve výrobě zbraní. Návrh zákona rovněž zakazuje lidem sdílet 'digitální plány zbraní' (blueprinty) bez povolení. Existují důvodné obavy, že se tento nešťastný nápad může šířit do dalších zemí a ovlivnit celý 3D tisk jako takový. Ostatně, s podobnou regulací nedávno přišel i stát Washington.

    NUKE GAZA! 🎆 | Komentářů: 16
    dnes 05:11 | Komunita

    Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za prosinec 2025 a leden 2026 (YouTube). Zajímavé, že i v roce 2026 celou řadu problémů vyřeší falšování řetězce User-Agent.

    Ladislav Hagara | Komentářů: 2
    včera 20:11 | Komunita

    Bylo rozhodnuto, že Linux From Scratch (LFS) končí s podporou System V init. Nové verze knih s návody na instalaci vlastního linuxového systému ze zdrojových kódů už budou pouze se systemd.

    Ladislav Hagara | Komentářů: 8
    včera 17:00 | Nová verze

    Byla vydána nová verze 2026.1.0 "Like a Version" svobodného softwaru ScummVM (Wikipedie) umožňujícího bezproblémový běh mnoha klasických adventur na zařízeních, pro které nebyly nikdy určeny. Přehled novinek v poznámkách k vydání a na GitHubu. Změněno bylo číslování verzí. Předchozí verze byla 2.9.1.

    Ladislav Hagara | Komentářů: 2
    včera 14:55 | IT novinky

    Internetový prohlížeč Firefox bude mít nové ovládací prvky pro umělou inteligenci, které umožní uživatelům vypnout vestavěné AI funkce přímo v nastavení prohlížeče. Jednotlivě půjde vypnout nebo zapnout automatické překlady stránek, generovaní popisného textu k obrázkům v otevřených PDF dokumentech, samoorganizaci tabů do skupin, náhledy odkazů s krátkým shrnutím a boční panel s chatbotem. Tyto možnosti v nastavení prohlížeče

    … více »
    NUKE GAZA! 🎆 | Komentářů: 12
    včera 14:44 | IT novinky

    Desktopové prostředí KDE Plasma 6.6, která je právě ve fázi beta, nahrazuje stávající SDDM novým Plasma Login Managerem, který je ale pevně navázán na systemd. Plasma Login Manager využívá systemd-logind a další součásti systemd, které nejsou dostupné v operačních systémech bez systemd, jako je například FreeBSD, případně jsou linuxové distribuce Gentoo, Void Linux anebo Alpine Linux. Pro uživatele zatím stále ještě existuje možnost používat SDDM.

    NUKE GAZA! 🎆 | Komentářů: 6
    Které desktopové prostředí na Linuxu používáte?
     (18%)
     (6%)
     (0%)
     (10%)
     (25%)
     (3%)
     (5%)
     (2%)
     (12%)
     (30%)
    Celkem 755 hlasů
     Komentářů: 25, poslední včera 19:50
    Rozcestník

    Dotaz: Redefinování makra v C++

    7.4.2013 15:58 blorg
    Redefinování makra v C++
    Přečteno: 551×
    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.