Я застрял здесь ...
#include <stdio.h>
#define DBG_LVL(lvl, stmt) \
do{ \
if(lvl>1) printf stmt; \
}while(0)
#define DBG_INFO(stmt) DBG_LVL(1, stmt)
#define DBG_ERROR(stmt) DBG_LVL(2, stmt)
int main()
{
DBG_INFO(("hello, %s!\n", "world"));
DBG_ERROR(("crazy, %s!\n", "world"));
return 0;
}
Как видите, в приведенном выше коде для управления уровнем отладочной информации используются макросы типа "DBG_INFO" или "DBG_ERROR".
Теперьпо какой-то причине я должен заменить DBG_LVL()
новой функцией.
void myprint(int lvl, const char * format, ...);
Единственное отличие состоит в том, что уровень отладки принимается в качестве первого параметра.Я думал:
#define DBG_LVL(lvl, stmt) myprint(lvl, stmt)
Конечно, это не удалось, потому что выражение "stmt" включает круглые скобки вокруг .Потом я погуглил, пытаясь найти способ убрать скобки, кажется, ничто не могло помочь.Я также попробовал некоторые приемы для передачи параметров в "stmt", но все равно не получилось ...: (
Можете ли вы мне помочь?