Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Справочник по функциям С++.doc
Скачиваний:
130
Добавлен:
02.05.2014
Размер:
3.57 Mб
Скачать

Ungetch

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

НазначениеВозвращает символ обратно в буфер клавиатуры.

Синтаксис int ungetch(int ch);

Прототип вconio.h

Замечанияungetch возвращает символ ch обратно на кон-

соль, поэтому он будет следующим прочитанным

символом. Функция ungetch не будет выполнена,

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

следующим чтением.

ВозвращаемоеВ случае успеха ungetch возвращает символ ch.

значениеЕсли операция не удалась, возвращается EOF.

Переносимостьungetch доступна в UNIX-системах.

См. также getch,getche

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

Unixtodos

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

НазначениеПреобразует дату и время к формату DOS.

Синтаксис #include <dos.h>

void unixtodos(long time, struct date *d,

struct time *t);

Прототип в dos.h

Замечанияunixtodos преобразует время, заданное в time в

формате UNIX, к формату DOS и заполняет струк-

туры date и time, на которые указывают d и t.

ВозвращаемоеНет.

значение

Переносимостьunixtodos уникальна для DOS.

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

unlink

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

НазначениеУничтожает файл.

Синтаксисint unlink(const char *filename);

Прототип вdos.h, io.h, stdio.h

Замечанияunlink уничтожает файл, специфицированный аргу-

ментом filename. В filename могут указываться

любые устройства DOS, маршруты доступа и имена

файлов. Использование метасимволов недопустимо.

Файлы, предназначенные только для чтения, не

могут быть уничтожены путем обращения к этой

функции. Для уничтожения таких файлов необходи-

мо предварительно с помощью функций chmod или

_chmod изменить соответствующие атрибуты.

ВозвращаемоеВ случае успешного завершения unlink возвращает

значение0. В случае ошибки возвращается -1 и переменная

errno принимает одно из следующих значений:

ENOENT - маршрут или имя файла не обнаружены

EACCES - не разрешен доступ к файлу

Переносимостьunlink доступна в UNIX-системах.

См. также chmod,remove

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

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 <stdarg.h>

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 <stdio.h>

#include <stdarg.h>

/* вычисление суммы списка, завершающегося 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 <stdio.h>

#include <stdarg.h>

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

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