Слайд 2


Компілятор контролює тільки обов’язкові фактичні
параметри, типи яких відомі, а

Компілятор контролює тільки обов’язкові фактичні параметри, типи яких відомі, а кількість і
кількість і типи
неоголошених параметрів не перевіряє.
Прикладами бібліотечних функцій зі змінною кількістю
параметрів є функції printf () та scanf () .
Реалізація функцій з неоголошеними параметрами
базується на механізмі взаємодії фактичних і формальних
параметрів через стек. Схема запису в стек значень
фактичних параметрів визначається системою
програмування. Бібліотека С містить спеціальні функції-
макроси, задекларовані в заголовному файлі для
доступу до неоголошених параметрів, незалежно від
конкретної програмно-апаратної організації збереження
параметрів.

Слайд 3


Визначаються – вказівник з типом va_list для звертання
до необов’язкових

Визначаються – вказівник з типом va_list для звертання до необов’язкових параметрів і
параметрів і три макроси: va_start,
va_arg, va_end.
Макрос va_start має синтаксис:
void va_start ( va_list ap, lastfix);
Цей макрос починає роботу зі списком, встановлюючи
його покажчик ap на перший неоголошений параметр.
Другим аргументом вказується ім’я останнього з
обов’язкових параметрів.
Макрос va_arg має синтаксис:
void va_arg ( va_list ap, type); Цей макрос повертає значення наступного (чергового)
аргументу зі списку. Другий аргумент задає тип поточного
неоголошеного параметра.

Слайд 4


  Перед викликом va_arg значення ap повинне бути
встановлене викликом va_start або

Перед викликом va_arg значення ap повинне бути встановлене викликом va_start або va_arg.
va_arg.
Кожний виклик va_arg переводить покажчик на наступний
аргумент.
Макрос va_end має синтаксис:
void va_end ( va_list ap );
Даний макрос завершує роботу зі списком, звільняючи
пам'ять.
Приклад.
#include #include void sum (char *msg, ...) {
int total = 0;      va_list ap;