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 04:44 | Humor

    Linus Torvalds na YouTube kanálu Linus Tech Tips staví dokonalý linuxový počítač.

    Ladislav Hagara | Komentářů: 0
    dnes 04:11 | Nová verze

    Po 9 týdnech vývoje od vydání Linuxu 6.17 oznámil Linus Torvalds vydání Linuxu 6.18. Přehled novinek a vylepšení na LWN.net: první a druhá polovina začleňovacího okna a Linux Kernel Newbies. Vypíchnout lze například podporu protokolu PSP (PSP Security Protocol, PSP encryption of TCP connections).

    Ladislav Hagara | Komentářů: 0
    dnes 03:55 | Nová verze

    Byla vydána nová stabilní verze 25.11 linuxové distribuce NixOS (Wikipedie). Její kódové označení je Xantusia. Podrobný přehled novinek v poznámkách k vydání. O balíčky se v NixOS stará správce balíčků Nix.

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

    Richard Hughes na Mastodonu oznámil, že se společnost Framework Computer stala sponzorem služby LVFS (Linux Vendor Firmware Service) umožňující aktualizovat firmware zařízení na počítačích s Linuxem.

    Ladislav Hagara | Komentářů: 0
    28.11. 18:55 | Humor

    Jak na webu co nejšíleněji zadávat datum? Jak to uživatelům co nejvíce znepříjemnit? V Bad UX World Cup 2025 (YouTube) se vybíraly ty nejšílenější UX návrhy. Vítězným návrhem se stal Perfect Date.

    Ladislav Hagara | Komentářů: 12
    28.11. 12:44 | Zajímavý software

    Společnost Collabora vydala (YouTube) na LibreOffice založený desktopový kancelářský balík Collabora Office. Pro Windows, macOS a Linux. Se stejným uživatelským rozhraním jako Collabora Online. Svůj desktopový kancelářský balík s rozhraním LibreOffice pojmenovala Collabora Office Classic.

    Ladislav Hagara | Komentářů: 12
    28.11. 12:00 | Nová verze

    Glen MacArthur vydal AV Linux (AVL) a MX Moksha (MXM) 25. S linuxovým jádrem Liquorix. AV Linux (Wikipedie) je linuxová distribuce optimalizována pro tvůrce audio a video obsahu. Nejnovější AV Linux vychází z MX Linuxu 25 a Debianu 13 Trixie. AV Linux přichází s desktopovým prostředím Enlightenment 0.27.1 a MX Moksha s prostředím Moksha 0.4.1 (fork Enlightenmentu).

    Ladislav Hagara | Komentářů: 0
    27.11. 17:55 | Nová verze

    Ubuntu pro testování nových verzí vydává měsíční snapshoty. Dnes vyšel 1. snapshot Ubuntu 26.04 LTS (Resolute Raccoon).

    Ladislav Hagara | Komentářů: 0
    27.11. 14:33 | IT novinky

    Zástupci členských států EU se včera shodli na návrhu, který má bojovat proti šíření materiálů na internetu zobrazujících sexuální zneužívání dětí. Nařízení známé pod zkratkou CSAM a přezdívané chat control mělo množství kritiků a dlouho nebyla pro jeho schválení dostatečná podpora. Pro schválení byla potřeba kvalifikovaná většina a dánské předsednictví v Radě EU se snažilo dosáhnout kompromisu. Návrh nakonec po dlouhých týdnech

    … více »
    Ladislav Hagara | Komentářů: 15
    27.11. 12:22 | Zajímavý software

    Britské herní studio Facepunch stojící za počítačovými hrami Garry's Mod a Rust uvolnilo svůj herní engine s&box (Wikipedie) jako open source. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT. Herní engine s&box je postavený nad proprietárním herním enginem Source 2 od společnosti Valve.

    Ladislav Hagara | Komentářů: 1
    Jaké řešení používáte k vývoji / práci?
     (34%)
     (47%)
     (19%)
     (18%)
     (23%)
     (16%)
     (24%)
     (16%)
     (18%)
    Celkem 418 hlasů
     Komentářů: 17, poslední 19.11. 21:57
    Rozcestník

    Dotaz: Jazyk C - makro do - while na globální úrovni

    14.3.2012 01:19 Matěj Vaňátko | skóre: 19 | Brno
    Jazyk C - makro do - while na globální úrovni
    Přečteno: 471×
    Zdravím vás všechny. S jazykem C tak trochu začínám a potřeboval bych udělat makro do - while se 2 parametry. Makro mám udělané takto:

    #define Jmeno_makra(x, y) \
    do { \
    příkazy v makru \
    } while (0)


    Jenže to funguje jen na lokální úrovni ve funkcích. Neporadili byste mi prosím nějakou vychytávku, abych tohle makro (nebo podobné) mohl rozvinout i na globální úrovni ?

    V tuhle chvíli mi totiž překladač hází tyto 2 chyby
    error: expected identifier or ‘(’ before ‘do’
    error: expected identifier or ‘(’ before ‘while’

    Děkuju moc za rady

    Řešení dotazu:


    Odpovědi

    pavlix avatar 14.3.2012 01:39 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Jazyk C - makro do - while na globální úrovni
    Je potřeba vždy poslat celý chybný kód a ne jenom jeho část.

    Na globální úrovni ti do…while nebude fungovat, tam se žádný kód nevolá, céčko není Python.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    14.3.2012 09:17 Matěj Vaňátko | skóre: 19 | Brno
    Rozbalit Rozbalit vše Re: Jazyk C - makro do - while na globální úrovni
    Python bohužel neznám, takže to neporovnám.
    Mám v céčku napsaný toto makro:
    #define BitArray(p, size) \
    unsigned long p[(size)]; \
    memset(p, 0, ((size) * sizeof(unsigned long))) \
    p[0] = size;


    To funguje na lokální úrovni ve funkcích naprosto skvěle. Potřebuji ale, aby to fungovalo i globálně. Aby to vytvořilo globální pole unsigned longů. Přiznám se, je to kousíček projektu do školy. Ale fakt už nevim, jak toto vyřešit, jinak už celý projekt hotov :-)
    14.3.2012 09:45 Marble | skóre: 27 | blog: marble
    Rozbalit Rozbalit vše Re: Jazyk C - makro do - while na globální úrovni

    Pokud výrazem "globální úroven" myslíš mimo jakoukoliv funkci (včetně main), tak to není oblast, kde se vykonávají příkazy a tudíž tam nemůžeš ani volat fuknkce, přiřazovat atd.; vstupním bodem C programu je právě fukce main().

    Nicméně pokud chápu, o co se snažíš, tak to memset je úplně zbytečný a přiřazení zajistí inicializace pole přímo v jeho deklaraci (viz třeba C FAQ list).

    Ale pozor na to, že statické pole inicializované nenulovým obsahem ti patrně skončí v celé své délce ve výsledné binárce (pokud se nebude kompiler extra snažit optimalizovat, ale nevím jestli a za jakých podmínek to dělá, gcc standardně ne).

    14.3.2012 10:39 Matěj Vaňátko | skóre: 19 | Brno
    Rozbalit Rozbalit vše Re: Jazyk C - makro do - while na globální úrovni
    Ano, globální úrovní myslím to, co popisuješ. Potřebuji, aby to makro dokázalo vytvořit jak lokální, tak globální pole o zadané délce. Když tu délku zadám pomocí #define... , tak to samozřejmě je v cajku a memset je tudíž zbytečný ;-) Ale v další části projektu tomu samému makru potřebuju předat tu velikost pole pomocí proměnné.

    Tudíž otázka -> jde toto vlastně udělat ? Nebo se na to vykašlat a přepsat si pro další část toho projektu to makro do funkce ?
    14.3.2012 11:27 Marble | skóre: 27 | blog: marble
    Rozbalit Rozbalit vše Re: Jazyk C - makro do - while na globální úrovni
    No, pokud to makro budeš používat pro deklaraci variable-length pole (což je mmch feature až C99, tedy ne úplně samozřejmě podporovaná věc), tak ti bude fungovat jen pokud bude přesně na konci deklarací proměnných. Ani v C99 se nedá prokládat deklarace a kod, na to potřebuješ C++.

    S otázkou makro/funkce to prakticky vůbec nesouvisí. Tam, kde se neprovádí kod, nemůžeš ani volat svojí funkci. Naopak nevím, jak by chtěl ve funkci řešit deklaraci. Prostě v C se deklarace a (nestatická) inicializace proměnných nedá moc dobře spojit.

    Jestli je možné "toto" udělat záleží na tom, co přesně je "toto". (Předpokládám, že nestojíš o ten konkrétní kus, co jsi tu poslal, ale o nějakou obecnější vlastnost.) Možná je nejjednodušší mírně přehodnotit použité metody s ohledem na vlastnosti C, ale to už musíš posoudit podle toho, čeho chceš dosáhnout.
    pavlix avatar 15.3.2012 00:25 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Jazyk C - makro do - while na globální úrovni
    To funguje na lokální úrovni ve funkcích naprosto skvěle.
    Taky řídící konstrukce jako cykly se v céčku používají jen tam, kde můžeš napsat sekvenci příkazů. Tedy pouze ve funkcích. I kód, který obsluhuje globální proměnné se provádí ve funkcích. Tak je ten programovací jazyk stavěný.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    Řešení 1× (Fuky)
    Josef Kufner avatar 15.3.2012 02:36 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Jazyk C - makro do - while na globální úrovni
    To o co se snažíš s největší pravděpodobností půjde mnohem snadněji, když to celé překopeš a začneš úplně odjinud. Btw, na co takovou obludnost potřebuješ?
    Hello world ! Segmentation fault (core dumped)

    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.