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í
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
dnes 16:00 | Nová verze

Byla vydána verze 0.98 svobodného nelineárního video editoru Pitivi. Z novinek lze zmínit například přizpůsobitelné klávesové zkratky. Videoukázka práce s nejnovější verzí Pitivi na YouTube.

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

Stop motion je technika animace, při níž je reálný objekt mezi jednotlivými snímky ručně upravován a posouván o malé úseky, tak aby po spojení vyvolala animace dojem spojitosti. Jaký software lze pro stop motion použít na Linuxu? Článek na OMG! Ubuntu! představuje Heron Animation. Ten bohužel podporuje pouze webové kamery. Podpora digitálních zrcadlovek je začleněna například v programu qStopMotion.

Ladislav Hagara | Komentářů: 1
včera 21:21 | Nová verze Ladislav Hagara | Komentářů: 0
včera 11:44 | Zajímavý projekt

Na Indiegogo byla spuštěna kampaň na podporu herní mini konzole a multimediálního centra RetroEngine Sigma od Doyodo. Předobjednat ji lze již od 49 dolarů. Požadovaná částka 20 000 dolarů byla překonána již 6 krát. Majitelé mini konzole si budou moci zahrát hry pro Atari VCS 2600, Sega Genesis nebo NES. Předinstalováno bude multimediální centrum Kodi.

Ladislav Hagara | Komentářů: 0
včera 00:10 | Nová verze

Byla vydána verze 4.7 redakčního systému WordPress. Kódové označením Vaughan bylo vybráno na počest americké jazzové zpěvačky Sarah "Sassy" Vaughan. Z novinek lze zmínit například novou výchozí šablonu Twenty Seventeen, náhledy pdf souborů nebo WordPress REST API.

Ladislav Hagara | Komentářů: 4
6.12. 12:00 | Zajímavý projekt

Projekt Termbox umožňuje vyzkoušet si linuxové distribuce Ubuntu, Debian, Fedora, CentOS a Arch Linux ve webovém prohlížeči. Řešení je postaveno na projektu HyperContainer. Podrobnosti v často kladených dotazech (FAQ). Zdrojové kódy jsou k dispozici na GitHubu [reddit].

Ladislav Hagara | Komentářů: 27
6.12. 11:00 | Bezpečnostní upozornění

Byly zveřejněny informace o bezpečnostní chybě CVE-2016-8655 v Linuxu zneužitelné k lokální eskalaci práv. Chyba se dostala do linuxového jádra v srpnu 2011. V upstreamu byla opravena minulý týden [Hacker News].

Ladislav Hagara | Komentářů: 2
5.12. 22:00 | Komunita

Přibližně před měsícem bylo oznámeno, že linuxová distribuce SUSE Linux Enterprise Server (SLES) běží nově také Raspberry Pi 3 (dokumentace). Obraz verze 12 SP2 pro Raspberry Pi 3 je ke stažení zdarma. Pro registrované jsou po dobu jednoho roku zdarma také aktualizace. Dnes bylo oznámeno, že pro Raspberry Pi 3 je k dispozici také nové openSUSE Leap 42.2 (zprávička). K dispozici je hned několik obrazů.

Ladislav Hagara | Komentářů: 6
5.12. 06:00 | Zajímavý software

OMG! Ubuntu! představuje emulátor terminálu Hyper (GitHub) postavený na webových technologiích (HTML, CSS a JavaScript). V diskusi k článku je zmíněn podobný emulátor terminálu Black Screen. Hyper i Black Screen používají framework Electron, stejně jako editor Atom nebo vývojové prostředí Visual Studio Code.

Ladislav Hagara | Komentářů: 50
5.12. 06:00 | Zajímavý článek

I letos vychází řada ajťáckých adventních kalendářů. QEMU Advent Calendar 2016 přináší každý den nový obraz disku pro QEMU. Programátoři se mohou potrápit při řešení úloh z kalendáře Advent of Code 2016. Kalendáře Perl Advent Calendar 2016 a Perl 6 Advent Calendar přinášejí každý den zajímavé informace o programovacím jazyce Perl. Stranou nezůstává ani programovací jazyk Go.

Ladislav Hagara | Komentářů: 10
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (23%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 792 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

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: 343×
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: 53 | 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.
GentooFedoraSCRAM – Jsem open source vývojář, nikoli markeťák ⇒ názory zde uvedené jsou jen mé vlastní.
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 | Švédsko
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 | Švédsko
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: 53 | 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ý.
GentooFedoraSCRAM – Jsem open source vývojář, nikoli markeťák ⇒ názory zde uvedené jsou jen mé vlastní.
Řešení 1× (Fuky)
Josef Kufner avatar 15.3.2012 02:36 Josef Kufner | skóre: 66
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.