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:22 | Nová verze

    Byla vydána verze R14.1.7 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5, Wikipedie). Přehled novinek v poznámkách k vydání, podrobnosti v seznamu změn.

    JZD | Komentářů: 2
    dnes 00:33 | Nová verze

    Bazzite (Wikipedie), tj. linuxová distribuce vycházející z Fedora Linuxu a optimalizována pro hraní počítačových her, byla vydána ve verzi 45. S Open Gaming Collective (OGC) jádrem a novým Easy Anti-Cheatem pro Linux (EAC Linux v2).

    Ladislav Hagara | Komentářů: 0
    včera 22:11 | Bezpečnostní upozornění

    MikroTik zveřejnil vlastní bezpečnostní upozornění potvrzující, že zranitelnost linuxového jádra postihuje také RouterOS 7. Jde o use-after-free při zpracování IPv4 TCP spojení s IP options. Zranitelnost se týká provozu směřujícího na TCP službu samotného routeru, nikoli paketů, které router pouze přeposílá. Opraveno v long-term od 7.24.6, v stable od 7.25.1 a devel od 7.26beta5.

    vencour | Komentářů: 0
    včera 17:00 | Bezpečnostní upozornění

    Ve správci balíčků APT, používaném v Debianu a odvozených distribucích, byla nalezena a opravena kritická zranitelnost CVE-2026-109518. Vzdálený útočník může obejít ověření stažených balíčků pomocí přesměrování a dočasných chyb HTTP serveru.

    Ladislav Hagara | Komentářů: 1
    včera 13:11 | IT novinky

    Nejvyšší kontrolní úřad (NKÚ) vydal zprávu o finančním řízení prostředků EU v ČR (pdf). Dočíst se lze například, že přes 8 miliard korun na digitální vzdělávání nepřineslo naplnění žádného z prioritních cílů programu. Peněžní prostředky z fondů EU sice byly vynaloženy formálně v souladu s právními předpisy, avšak s minimálním nebo neprokazatelným dopadem na proklamované cíle ve vzdělávání. Na Metodickém portálu RVP.CZ bylo ke konci

    … více »
    Ladislav Hagara | Komentářů: 18
    včera 11:33 | Nová verze

    Emulátor terminálu kitty (Wikipedie, GitHub) byl vydán v nové verzi 0.50.

    Ladislav Hagara | Komentářů: 3
    včera 09:00 | Bezpečnostní upozornění

    Vývojáři C-Kermit oznámili několik dlouhodobě přítomných zranitelností. Patří mezi ně buffer overflow v Telnet/FTP klientovi a command injection v Kermit serveru. Dotčené verze: C-Kermit 11.0.514 a starší. Fix: 11.1.515 [oss-security].

    vencour | Komentářů: 0
    včera 02:44 | Nová verze

    Byla vydána nová verze 3.2.8 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP (GNU Image Manipulation Program). Přehled novinek v oznámení o vydání a v souboru NEWS na GitLabu. Nový GIMP je již k dispozici také na Flathubu.

    Ladislav Hagara | Komentářů: 0
    3.11. 16:55 | Nová verze

    Projekt openSUSE dnes, 3. listopadu 2026, oficiálně vydal openSUSE Leap 16.1, novou verzi své stabilní linuxové distribuce. Novinkou je také Immutable Mode, který nahrazuje dosavadní samostatnou distribuci openSUSE Leap Micro. Podrobnosti o novém vydání najdete v oficiálním oznámení nebo v českém překladu oznámení. Instalační obrazy jsou již dostupné na get.opensuse.org. Vydání společně oslavíme v pátek ve virtuálním baru a na … více »

    lkocman | Komentářů: 0
    3.11. 16:00 | Nová verze

    Bylo oznámeno vydání Fedora Linuxu 45. Ve finální verzi vychází šest oficiálních edic: Fedora Workstation a Fedora KDE Plasma Desktop pro desktopové, Fedora Server pro serverové, Fedora Cloud pro cloudové nasazení, Fedora CoreOS pro ty, kteří preferují neměnné systémy a Fedora IoT pro internet věcí. Vedle nich jsou k dispozici také další atomické desktopy, spiny a laby. Podrobný přehled novinek v samostatných článcích na stránkách

    … více »
    Ladislav Hagara | Komentářů: 1
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (21%)
     (30%)
     (9%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 2980 hlasů
     Komentářů: 34, poslední 26.10. 08:24
    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: 773×
    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ákno • Nahoru

    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.