Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как передать переменное число параметров в функцию
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
west329_
Разбираюсь в чужом коде. Код написан красиво.

В критических секциях используется функции отладки типа:
Код
debug_mod1("\r\nNew Frame %LU %LU %U:  PROT=%LX ", modem_next, modem_last, modem_overrun, frame->protocol);
debug_mod1("\r\nNO CARRIER HANGUP");


но по умолчанию отладка в некоторых файлах не используется, а описывается как
Код
#define debug_mod1


и при сборке компилятор вежливо предупреждает, что строка пропускается
Код
>>> Warning 207 "D:\Main_prj\stacktsk.c" Line 405(1,1): Code has no effect


Требуется эти строки отладки оживить, для это используется стандартная рабочая процедура типа
Код
fprintf(USER,"%U.%U.%U.%U",ip->v[0],ip->v[1],ip->v[2],ip->v[3]);

которя работает в цикле main() и отображет только маленькую часть служебной информации.

Как правильно связать эти фунции через #define ? там где используется передача нескольки параметров ?.
Мне удалось связать только часть отладочной информации типа:
Код
#define debug_stack(x) fprintf(USER, x);


но
Код
debug_stack(x)
содержит только текст без параметров

но есть в некоторых файлах вместе с списком параметров типа:
Код
debug_mod1("\r\nNew Frame %LU %LU %U:  PROT=%LX ", modem_next, modem_last, modem_overrun, frame->protocol);


как такую функцию переопределить для fprintf() ?

Использую MPLAB CCS для PIC18


Не знаю стоит ли с параметрами залазить в
Код
#include <stdarg.h>
, может существует какоето более изящное рещение типа:
Код
#define debug_mod1(format, ...) fprintf (USER, format, ...);
???
aaarrr
Цитата(west329_ @ Apr 28 2010, 22:06) *
как такую функцию переопределить для fprintf() ?

Код
#include <stdarg.h>

void debug_mod1(const char *fmt, ...)
{
    va_list ap;

    va_start(ap, fmt);
    fprintf(USER, fmt, ap);
    va_end(ap);
}

С обычным printf проще:
Код
#ifdef __DEBUG__
#define debug_mod1(...)    printf(__VA_ARGS__)
#else
#define debug_mod1(...)
#endif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.