Главная страница
Навигация по странице:

  • Возвращаемое

  • Назначение

  • Прототип в

  • Переносимость

  • Справочник по функциям С++. Подпрограммы классификации Подпрограммы преобразования


    Скачать 3.41 Mb.
    НазваниеПодпрограммы классификации Подпрограммы преобразования
    АнкорСправочник по функциям С++.doc
    Дата07.05.2018
    Размер3.41 Mb.
    Формат файлаdoc
    Имя файлаСправочник по функциям С++.doc
    ТипДокументы
    #18992
    КатегорияИнформатика. Вычислительная техника
    страница119 из 120
    1   ...   112   113   114   115   116   117   118   119   120

    unlock


    -----------------------------------------------------------------
    Назначение Разрешает совместное использование файла.
    Синтаксис int unlock(int handle, long offset,

    long length);
    Прототип в io.h
    Замечания unlock обеспечивает интерфейс к механизму сов-

    местного использования файлов DOS 3.X.
    unlock удаляет защиту (замок), установленную

    перед этим функцией lock. Для предотвращения

    ошибки все замки должны быть сняты до закрытия

    файла.
    Возвращаемое unlock возвращает 0 в случае успешного заверше-

    значение ния и -1 в случае ошибочного.
    Переносимость unlock уникальна для DOS 3.x. Более старшие

    версии ее не поддерживают.
    См. также lock, sopen

    -----------------------------------------------------------------

    va_...


    -----------------------------------------------------------------
    Назначение Позволяет использовать переменный список аргу-

    ментов.
    Синтаксис #include

    void va_start(va_list param, lastfix);

    type va_arg(va_list param, type);

    void va_end(va_list param);
    Прототип в stdarg.h
    Замечания Некоторые функции Си, такие как vfprintf и

    vprintf, имеют переменный список аргументов до-

    полнительно к фиксированным. Макросы семейства

    va_... позволяют осуществить доступ к такому

    списку аргументов. Эти макросы используются для

    поэлементной обработки списка аргументов, когда

    вызываемой функции неизвестно ни количество, ни

    типы передаваемых ей аргументов.
    Файл-заголовок stdarg.h содержит описание одно-

    го типа (va_list) и трех макросов (va_start,

    va_arg, va_end).
    va_list

    -------

    Этот массив содержит информацию, необходимую

    для va_arg и va_end. Когда вызываемая функция

    принимает переменный список аргументов, он объ-

    является как переменная param типа va_list.
    va_start

    --------

    Эта подпрограмма (реализованная как макрос)

    присваивает param значение указателя на первый

    элемент списка аргументов, который будет пере-

    дан функции. va_start должна быть вызвана до

    первого обращения к va_arg или va_end.
    va_start имеет два параметра: param и lastfix

    (param рассмотрен при описании va_list в преды-

    дущем параграфе; lastfix - имя последнего фик-

    сированного параметра, передаваемого вызываемой

    функции).
    va_arg

    ------

    Эта процедура (также реализованная как макрос)

    расширяется в выражение, которое имеет тот же

    тип и значение, что и следующий аргумент, кото-

    рый должен быть передан функции (один из аргу-

    ментов переменного списка). Переменная param в

    va_arg должна быть той же самой переменной

    param, которая инициализировалась в va_start.
    При первом обращении к va_arg, она возвращает

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

    обращении к va_arg, она будет возвращать следу-

    ющий аргумент из списка. Она осуществляет это

    посредством использования первого значения

    param, после чего значение param увеличивается

    до значения указателя на следующий элемент.

    va_arg использует аргумент type как для получе-

    ния текущего элемента, так и для коррекции ука-

    зателя на следующий элемент. При каждом обраще-

    нии к va_arg она изменяет значение указателя

    param так, чтобы он указывал на следующий аргу-

    мент списка.
    va_end

    ------

    Этот макрос помогает при обращении к функции

    обеспечить ее нормальное завершение. va_end мо-

    жет так модифицировать param, что он не сможет

    использоваться до повторного обращения к

    va_start. va_end должен быть вызван после того,

    как va_arg прочитает все аргументы списка; иг-

    норирование этого может послужить причиной

    странного и непредвиденного поведения вашей

    программы.
    Возвращаемое va_start и va_end не возвращают никаких значе-

    значение ний; va_arg возвращает текущий аргумент списка

    (тот самый, на который указывает param).
    Переносимость va_arg, va_start и va_end доступны в UNIX -

    системах.
    См. также v...printf, v...scanf
    Пример 1 #include

    #include

    /* вычисление суммы списка, завершающегося 0 */

    void sum(char *msg, ...)

    {

    int total = 0;

    va_list ap;

    int arg;
    va_start(ap, msg);

    while ((arg = va_arg(ap,int)) !=0 )

    {

    total += arg;

    }

    printf(msg, total);

    }
    main()

    {

    sum ("Итоговая сумма 1+2+3+4 равна %d\n",

    1,2,3,4,0);

    }


    Вывод программы
    Итоговая сумма 1+2+3+4 равна 10


    Пример 2 #include

    #include
    void error(char *format,...)

    {

    va_list argptr;
    printf("ошибка: ");

    va_start(argptr, format);

    vprintf(format, argptr);

    va_end(argptr);

    }
    main()

    {

    int value = -1;
    error("это просто сообщение об ошибке \n");

    error("обнаружено неверное значение %d\n,

    value);

    }


    Вывод программы
    ошибка: это просто сообщение об ошибке

    ошибка: обнаружено неверное значение -1

    -----------------------------------------------------------------
    1   ...   112   113   114   115   116   117   118   119   120


    написать администратору сайта