Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемТимофей Вебер
1 Функції з неоголошеними параметрами Інколи у функції потрібно передати деяке число фіксованих параметрів та невизначене число додаткових. В цьому випадку опис функції буде мати вигляд : тип ім'я_функції ( список параметрів,... ) Список аргументів включає в себе скінченне число обов'язкових параметрів (цей список не може бути порожнім), після якого на місці невизначеного числа параметрів ставиться три крапки. У викликах функцій зі змінною кількістю параметрів спочатку вказують значення обовязкових параметрів, а потім записують довільну кількість даних, що задають неоголошені параметри. Компілятор контролює тільки обовязкові фактичні параметри, типи яких відомі, а кількість і типи неоголошених параметрів не перевіряє. Прикладами бібліотечних функцій зі змінною кількістю параметрів є функції printf () та scanf ().
2 Реалізація функцій з неоголошеними параметрами базується на механізмі взаємодії фактичних і формальних параметрів через стек. Схема запису в стек значень фактичних параметрів визначається системою програмування. Бібліотека С містить спеціальні функції-макроси, задекларовані в заголовному файлі для доступу до неоголошених параметрів, незалежно від конкретної програмно-апаратної організації збереження параметрів. Визначаються – вказівник з типом va_list для звертання до необовязкових параметрів і три макроси: va_start, va_arg, va_end. Макрос va_start має синтаксис: void va_start(va_list ap, lastfix); Цей макрос починає роботу зі списком, встановлюючи його покажчик ap на перший неоголошений параметр. Другим аргументом вказується імя останнього з обовязкових параметрів.
3 Макрос va_arg має синтаксис: void va_arg(va_list ap, type); Цей макрос повертає значення наступного (чергового) аргументу зі списку. Другий аргумент задає тип поточного неоголошеного параметра. Перед викликом va_arg значення ap повинне бути встановлене викликом va_start або va_arg. Кожний виклик va_arg переводить покажчик на наступний аргумент. Макрос va_end має синтаксис: void va_end(va_list ap); Даний макрос завершує роботу зі списком, звільняючи пам'ять. Приклад. #include #include void sum (char *msg,...) {
4 int total = 0; va_list ap; int arg; va_start(ap, msg); while ((arg = va_arg(ap, int)) != 0) { total += arg; } printf(msg, total); va_end(ap); } int main(void) { sum("Сума рівна %d\n", 1,2,3,4,0); return 0; }
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.