Головна

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

  1. Cтроковие функції
  2. I. Використання користувальницької підпрограми-функції
  3. II-2.5.3. Способи завдання цільової функції
  4. II. ДЕРЖАВА, ЙОГО ПОХОДЖЕННЯ, СУТЬ І ТИПИ. ФУНКЦІЇ ДЕРЖАВИ.
  5. II. Ознаки, ресурси і функції влади.
  6. II. Принципи формування, функції та повноваження робочих груп очного (на базі освітньої організації), заочного муніципального та заочного регіонального етапів Конкурсу
  7. II. ФУНКЦІЇ І ФОРМИ ДЕРЖАВИ

Три крапки в списку параметрів користувача функції використовується тоді, коли число аргументів заздалегідь невідомо. При цьому невизначену кількість параметрів можна вказати в її прототипі наступним чином:

void f1(int a, double b, ...);

Такий запис вказує компілятору на те, що за обов'язковими фактичними аргументами для параметрів a и b можуть слідувати, а можуть і не слідувати інші аргументи при виклику цієї функції.

Перелічимо основні особливості використання даного механізму.

1. Використовується кілька макрокоманд для доступу до параметрів таких функцій, це:

va_list и va_start - Макроси підготовки доступу до параметрів;

va_arg - Використання параметрів;

va_end - Отчистка перед виходом.

Вони оголошені в заголовки stdarg.h.

2. Така функція повинна мати мінімум один параметр (іменований) для передачі їй кількості переданих аргументів.

3. Для макросу va_start необхідно передати два аргументи - ім'я списку параметрів, який задає va_list і їх кількість.

4. Порушувати вказаний порядок макрокоманд можна. Інакше можна отримати непередбачувані наслідки.

5. Для макросу va_arg потрібно крім імені списку параметрів передати і передбачуваний тип. У разі невідповідності типів - помилка.

Використання крапок цілком вимкнути перевірку типів параметрів. Три крапки необхідно, тільки якщо змінюються і число параметрів, і їх тип.

Наступний приклад ілюструє цю можливість.

#include

#include

void f1 (double s, int n ...) {

int v;

va_list p;

va_start (p, n);

printf ("\ n Double S =% lf", s);

for (int i = 1; i <= n; i ++) {

v = va_arg (p, int);

printf ("\ n Argument% d =% d", i, v);

}

va_end (p);

}

void main (void) {

f1 (1.5, 3, 4, 5, 6);

}

В результаті отримаємо:

Double S = 1.500000

Argument 1 = 4

Argument 2 = 5

Argument 3 = 6

Press any key to continue

Параметри зі значеннями за замовчуванням | Поняття шаблону функції


Алгоритм, що використовує стек | приклад реалізації | поняття хеширования | Приклади хеш-функцій | схеми хеширования | Приклади реалізації схем хешування | ЗАВДАННЯ 8. Обробка списків | ЗАВДАННЯ 9. Дерева і польський запис | Використання маніпуляторів | Приклад створення одновимірного динамічного масиву |

© 2016-2022  um.co.ua - учбові матеріали та реферати