реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Как передать переменное число параметров в функцию
west329_
сообщение Apr 28 2010, 18:06
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Разбираюсь в чужом коде. Код написан красиво.

В критических секциях используется функции отладки типа:
Код
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, ...);
???
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 28 2010, 18:16
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(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
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 22:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01372 секунд с 7
ELECTRONIX ©2004-2016