Как передать в функцию переменное число параметров - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Приветствую... вопрос есть положим есть функция:
UART0printf(const char *fmt, ...)
которая формирует строку и выводит ее в последовательный порт. Положим у класса Х есть функция:
Х::printf(const char *fmt, ...) {
    предобработка параметров();
    UART0printf(новые параметры);
}
Как мне в 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. Вот список действий, которые происходят в этом коде:

  1. В функции my_func объявляется переменная-список vl типа va_list.
  2. Функция va_start инициализирует этот список. Первый аргумент - это адрес первого аргумента функции my_func, а второй аргумент - это адрес символа par.
  3. Затем функция x_func вызывается с аргументами par и vl.
  4. Внутри функции x_func создается строка str, которая инициализируется значением первого аргумента функции my_func.
  5. Затем в цикле do-while происходит вывод значения str с помощью функции printf.
  6. Затем функция va_arg вызывается для получения следующего аргумента из списка.
  7. Цикл продолжается, пока не будет получено значение NULL, что означает конец списка аргументов.
  8. В конце функции va_end вызывается для освобождения ресурсов, выделенных для списка аргументов.
  9. В функции main вызывается функция my_func с тремя аргументами: dfrt, erty и ert.
  10. Функция my_func передает эти аргументы в функцию x_func.
  11. Функция x_func выводит каждый аргумент на новой строке.
  12. В конце программы возвращается значение 0, что означает успешное выполнение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5
Похожие ответы