Я пытаюсь использовать один аргумент макроса (предоставленный третьей стороной) для отображения строки с заполнителями и значениями этих заполнителей.
#define DBG1(AR1) do{ \
printf(AR1); \
}while(0);
int main()
{
int varDummy = 123;
/* Expecting Test Message 123*/
DBG1(("Test Message %d\r\n", varDummy));
return 0;
}
Обратите внимание на аргумент DBG1 («Тестовое сообщение% d \ r \ n», varDummy) в скобках и обрабатывается как целая строка, то есть const char *, а ошибка показывает, что varDummy не разрешено преобразовывать из-за его тип int.
В фактическом коде аргумент DBG1 имеет различное количество заполнителей (% d,% x ...) и соответствующие значения, которые должны быть напечатаны. По-видимому, я не могу отобразить переданную строку вместе со значениями ее заполнителя.
В реальном коде у меня есть следующий макрос от третьей стороны
LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom(%d, %p, %"SZT_F", 0x%x, ..)\n", s, mem, len, flags));
/* discarding the first argument */
#define LWIP_DEBUGF(debug, message) do{ \
DBG1(message) \
}while(0);
Обратите внимание, что это ресурс ограничен встроенная система.