Функции с переменным числом параметров

Одним из представителей подобных функций является, например, функция 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; просмотров: 216;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.007 сек.