Основы программирования на языке C

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


В языке Си допустимы функции, количество аргументов у которых при компиляции функции не фиксировано. Количество и тип аргументов становится известным только в момент вызова функции, когда явно задан список фактических аргументов (параметров). При определении и описании таких функций, имеющих списки параметров неопределенной длины. Спецификация формальных параметров заканчивается запятой и многоточием:

тип имя(спецификация-явных-параметров,...);

Здесь тип - тип возвращаемого функцией значения; имя - имя функции.

Спецификация явных параметров - список спецификации параметров, количество и типы которых фиксированы и известны в момент компиляции. Эти параметры обязательны. Каждая функция с переменным количеством параметров должна иметь хотя бы один обязательный параметр. После списка явных (обязательных) параметров ставится запятая, а затем - многоточие. Компилятор знает, что дальнейший контроль соответствия количества и типов параметров при обработке вызова функции проводить не нужно. Чтобы функция с переменным количеством параметров могла воспринимать параметры различных типов, необходимо в качестве исходных данных каким-то образом передавать ей информацию о типах параметров.

Пример:

#include <stdio.h> /* Функция суммирует значения своих параметров */ long summa(int m,...) /*m - число параметров*/ { int *p=&m; /*настроили указатель на параметр m*/ long t=0; for(;m;m--) t+=*(++p); return t; } void main() { printf("\n summa(2,6,4)=%d",summa(2,6,4)); printf("\n summa(6,1,2,3,4,5,6)=%d", summa(6,1,2,3,4,5,6)); }

on_load_lecture()

Перейти к вопросам »

  Если Вы заметили ошибку - сообщите нам.  
Страницы:



« |

1

|

2

|

3

|

4

|

вопросы | »

|

учебники

|

для печати и PDA

Курсы | Учебные программы | Учебники | Новости | Форум | Помощь



Телефон: +7 (495) 253-9312, 253-9313, факс: +7 (495) 253-9310, email: info@intuit.ru

© 2003-2007, INTUIT.ru::Интернет-Университет Информационных Технологий - дистанционное образование



Содержание раздела