LINUX.ORG.RU

define


0

0

Как на С искользовать динамические параметры в определениях (define) ?
например:

void func(const char *msg, ...) { /* . . . */}

#define FUNC(msg,...) func((msg), ?????)

FUNC( "message" )
FUNC( "message: %s", "assa" )
FUNC( "message %d %c", 1111, 'c' )

Вот не понятно как передать в func все параметры?

#define Fuck(a,b...) MyFunk(a,b)
void MyFunk(int a, ...){};

godexsoft
()

Я это пользую только для такого:
нужен дебаг красивый и удобный...

пишем

#ifdef DEBUG
#define debug(a,b...) mydebug(__FILE__, __LINE__, a,b)
#else
#define debug(a,b...)
#endif

#ifdef DEBUG
int mydebug(const char *file, int line, int level, const char * fmt, ...){
va_list ap;
char msg[1024];
int r;

if(Config.debug < level) return 0;
va_start(ap, fmt);
vsnprintf(msg, 1024, fmt, ap);

r = fprintf(stderr, "[BitWM [D%d]] %s/%d: %s\n", level, file, line, msg);

return r;
}
#endif

// код взят из BitWm.
// Терь мона компилять так: gcc main.c -DDEBUG -o myProg для поддержки дебага, или без -DDEBUG и тогда ВООБЩЕ небудет кода относящегося к дебагу ;)

godexsoft
()

info gcc

5.15 Macros with a Variable Number of Arguments.
================================================

In the ISO C standard of 1999, a macro can be declared to accept a
variable number of arguments much as a function can.  The syntax for
defining the macro is similar to that of a function.  Here is an
example:

     #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)

...

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.