staram się realizować funkcję makro w C, który poprzedza „DEBUG”, do argumentu, i przekazuje jej argumentów do printf:Błąd podczas definiowania stringising makro z __VA_ARGS__
#define DBG(format, ...) printf("DEBUG: " #format "\n", __VA_ARGS__)
To daje mi ten błąd w gcc:
src/include/debug.h:4:70: error: expected expression before ‘)’ token
#define DBG(format, ...) printf("DEBUG: " #format "\n", __VA_ARGS__)
^
Podobno powinno stringise format i przekazać swoje zmienne argumentów do printf, ale do tej pory nie mogę ominąć ten błąd.
EDIT
Po porzuceniu na stringising argumenty i dwukrotnie mieszania (##
) __VA_ARGS__
Mam teraz ten błąd:
src/lib/cmdlineutils.c: In function ‘version’:
src/lib/cmdlineutils.c:56:17: warning: ISO C99 requires rest arguments to be used [enabled by default]
DBG("version()");
powinienem być umieszczenie przecinka po argument?
DBG("version()",); // ?
Dla porównania, DBG() wygląda teraz tak:
#define DBG(format, ...) printf("DEBUG: " format "\n", ##__VA_ARGS__)
działa na mnie na gcc, które kompilator nie używasz? Czy możesz spróbować wstawić spację między # i formatem? – Leeor
$ gcc --version: gcc (GCC) 4.8.1 20130725 (prerelease) –