Portál AbcLinuxu, 9. května 2025 22:47
#define Jmeno_makra(x, y) \
do { \
příkazy v makru \
} while (0)
error: expected identifier or ‘(’ before ‘do’
error: expected identifier or ‘(’ before ‘while’
Řešení dotazu:
#define BitArray(p, size) \
unsigned long p[(size)]; \
memset(p, 0, ((size) * sizeof(unsigned long))) \
p[0] = size;
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).
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ý.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.