Portál AbcLinuxu, 5. května 2025 14:52
Řešení dotazu:
Asi jste zapomněl na definici toho makra, protože takhle vám vždy expanduje na prázdný text, takže pak vlastně překládáte
uint32_t SDOResponseTable[] = { , , , };
což pochopitelně neprojde.
cpp souce.c -o source_cpp.h
gcc -E
". To má výhodu, že stačí vzít příkaz, kterým se soubor překládá, nahradit v něm "-c
" přepínačem "-E
" a preprocesor bude spuštěný přesně tak, jak by to bylo při překladu.
#define SDOREPLY(index, subindex,len,val)
Makro jsem definované měl
Ano, ale tak, že vždy expandovalo na prázdný řetězec, což přesně odpovídá té chybě, kterou jste uvedl.
#define square(x) ((x) * (x))nebo
#define getc(p) (--(p)->cnt >= 0 \ ? (unsigned char) *(p)->ptr++ : _fillbuf(p))Za povšimnutí stojí závorky kolem argumentů a zpětné lomítko na konci pokračující řádky. Na větší funkce bych preprocesor raději nepoužíval.
/* niekde definovane v kode alebo v includovanom subore */ #define UNIX #ifdef UNIX puts("Program spustas na typovo Unixovom operacnom systeme."); #endif
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.