Как передать в функцию переменное число параметров - 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, что означает успешное выполнение.