Как передать в функцию переменное число параметров - C (СИ)
Формулировка задачи:
Приветствую... вопрос есть
положим есть функция:
которая формирует строку и выводит ее в последовательный порт.
Положим у класса Х есть функция:
Как мне в UART0printf передать параметры... ведь их переменное число... никогда еще так не делал )
спасибо
UART0printf(const char *fmt, ...)
Х::printf(const char *fmt, ...) { предобработка параметров(); UART0printf(новые параметры); }
Решение задачи: «Как передать в функцию переменное число параметров»
textual
Листинг программы
#include <iostream> #include <stdarg.h> void x_func(char *par, va_list &list){ char *str = par; do { printf ("%s\n",str); str=va_arg(list,char*); } while (str!=NULL); } void my_func(char *par,...){ va_list vl; va_start(vl,par); x_func(par, vl); va_end(vl); } int main() { my_func("dfrt","erty","ert",NULL); return 0; }
Объяснение кода листинга программы
В этом коде представлена функция my_func
, которая является оберткой для функции x_func
. my_func
принимает переменное число аргументов, которые передаются в x_func
.
Вот список действий, которые происходят в этом коде:
- В функции
my_func
объявляется переменная-списокvl
типаva_list
. - Функция
va_start
инициализирует этот список. Первый аргумент - это адрес первого аргумента функцииmy_func
, а второй аргумент - это адрес символаpar
. - Затем функция
x_func
вызывается с аргументамиpar
иvl
. - Внутри функции
x_func
создается строкаstr
, которая инициализируется значением первого аргумента функцииmy_func
. - Затем в цикле
do-while
происходит вывод значенияstr
с помощью функцииprintf
. - Затем функция
va_arg
вызывается для получения следующего аргумента из списка. - Цикл продолжается, пока не будет получено значение
NULL
, что означает конец списка аргументов. - В конце функции
va_end
вызывается для освобождения ресурсов, выделенных для списка аргументов. - В функции
main
вызывается функцияmy_func
с тремя аргументами:dfrt
,erty
иert
. - Функция
my_func
передает эти аргументы в функциюx_func
. - Функция
x_func
выводит каждый аргумент на новой строке. - В конце программы возвращается значение
0
, что означает успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д