Функции с переменным числом параметров
Одним из представителей подобных функций является, например, функция printf (), используемая в языках C и C++ для вывода данных:
Void main()
{
int a = 10, b = 20;
char *str = "Это текст";
printf("a = %d, с = %s, b = %d", a, str, b);
}
Эта функция может принимать произвольное число аргументов в зависимости от структуры первого аргумента, задающего так называемую строку формата. В строке формата каждый символ % означает подстановку соответствующего аргумента из перечисленных за строкой формата. Количество подставляемых аргументов должно соответствовать количеству символов % в стоке формата и может быть любым.
Для того чтобы написать собственную функцию с произвольным числом параметров, необходимо придерживаться определенной методики, включающей следующие пункты:
1. При разработке тела функции необходимо использовать макросы для работы со списками аргументов функций. Для их использования в программу необходимо включить заголовочный файл <stdarg.h>:
#include <stdarg.h>
2. В списке параметров заголовка функции должен присутствовать хотя бы один обязательный параметр, после которого следуют необязательные параметры, обозначенные тремя точками. Например:
double Summa (int N, …)
Здесь в списке параметров присутствует один обязательный параметр N, за которым могут следовать необязательные параметры. Необязательные параметры должны всегда находиться в конце списка параметров.
3. В теле функции необходимо определить переменную для работы со списком параметров (тип данных этой переменной va_list определен в <stdarg.h>), значение которой инициализируют с помощью макроса va_start (он также принадлежит <stdarg.h>). Перед завершением работы функции необходимо (обязательно!) с помощью макроса va_end очистить стек программы от необязательных параметров функции:
{
va_list L; //Объявляем переменную для списка параметров
va_start (L, N); //Инициализируем переменную списка параметров
……….
va_end (L); //Очищаем стек
return ………;
}
Макрос va_start имеет два параметра. Первый – это переменная списка параметров. Второй – имя последнего обязательного параметра функции (параметра, который находится в списке параметров непосредственно перед необязательными параметрами).
4. Получение очередного параметра из списка необязательных параметров осуществляется с помощью макроса va_arg (), например, так:
double R = 0;
for (int I = 0; I < N; ++ I)
R += va_arg (L, double);
Параметрами макроса va_argявляются переменная списка параметров и тип данных очередного параметра из списка.
Приведенные выше “заготовки” приводят нас к функции, выполняющей суммирование N вещественных значений:
#include <iostream>
#include <stdio.h>
#include <stdarg.h>
Дата добавления: 2019-02-07; просмотров: 226;