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:44 | IT novinky

    Samsung na akci Galaxy Unpacked July 2026 (YouTube) představil své nové telefony Galaxy Z Fold8 Ultra, Fold8 a Flip8, hodinky Galaxy Watch Ultra2 a Watch9 a chytré brýle ve spolupráci s Gentle Monster a Warby Parker.

    Ladislav Hagara | Komentářů: 0
    dnes 16:11 | IT novinky

    Po pěti letech vývoje vyšla česká počítačová hra Scarlet Deer Inn (ProtonDB). Scarlet Deer Inn je vyšívaná temná středověká pohádka. Zatímco život ve zdánlivě obyčejné vesnici se točí kolem běžných povinností a sousedských drbů, v podzemí se skrývají zlověstná tajemství.

    Ladislav Hagara | Komentářů: 1
    dnes 13:33 | IT novinky

    Představen byl Raspberry Pi Touch Display 2 s uhlopříčkou 10 palců a rozlišením 1200 × 1920 pixelů. Cena je 80 dolarů.

    Ladislav Hagara | Komentářů: 1
    dnes 13:22 | Komunita

    RPCS3 (Wikipedie), tj. open source emulátor Sony PlayStation 3, snížil minimální požadavky. Nově jsou podporovány starší grafické karty ATI Radeon řady HD 2000, 3000 a 4000 z let 2007 až 2009. Na PC běží už 75 % všech her pro PlayStation 3. V budoucnu bude RPCS3 fungovat bez firmwaru z PS3. V RPCS3 byl implementován systémový modul cellSysmodule (𝕏).

    Ladislav Hagara | Komentářů: 0
    dnes 11:00 | Zajímavý software

    Vyšel open-source nástroj winetop (MIT) — nativní CLI/TUI pro sledování a ukončování Wine, Proton, Lutris, Heroic a Bottles sezení. Seskupuje procesy podle WINEPREFIX / Steam AppId, umí bezpečně zabít jen hru (včetně Steam reaperu) a nabízí i skriptovatelné příkazy (list, kill, orphans, …). Balíčky jsou mimo jiné na crates.io, Copru (dnf copr enable kovariadam/winetop), PPA ppa:kovariadam/winetop a AUR (winetop-bin).

    kovariadam | Komentářů: 0
    dnes 02:44 | IT novinky

    Ve spolupráci společností OpenAI a Work Louder byla představena (𝕏) hardwarová klávesnice Codex Micro pro práci s AI agenty. Cena klávesnice je 230 dolarů.

    Ladislav Hagara | Komentářů: 1
    včera 20:00 | Nová verze

    Byl vydán Mozilla Firefox 153.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 153 bude brzy k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    včera 13:44 | Bezpečnostní upozornění Ladislav Hagara | Komentářů: 11
    včera 13:11 | Nová verze

    Byla vydána nová verze 5.44 programovacího jazyka Perl (Wikipedie). Do vývoje se zapojilo 71 vývojářů. Změněno bylo přibližně 270 tisíc řádků v 1 300 souborech. Přehled novinek a změn v podrobném seznamu.

    Ladislav Hagara | Komentářů: 0
    včera 12:33 | Pozvánky

    Na 23. září 2026 je do bratislavské Nové Cvernovky naplánovaná jednodenní konference #nobullshit.camp pro tech leadery, DevOps a platform inženýry. Mají tu zaznít upřímné příběhy z praxe o tom, co v produkčních systémech reálně fungovalo, co se pokazilo a co si z toho lidé odnesli. Témata pokrývají tři oblasti – DevOps a platformy (Kubernetes, cloud, provoz systémů), firemní kulturu a leadership. Program běží ve dvou formátech: hlavní

    … více »
    alian | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (11%)
     (7%)
     (2%)
     (17%)
     (30%)
     (5%)
     (6%)
     (2%)
     (15%)
     (24%)
    Celkem 2204 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    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: 548×
    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.