Глобальные переменные
Borland С++ предусматривает ряд предопределенных глобальных переменных, которые могут использоваться при работе с датой, временем, аргументами командной строки и т.д.
Переменная _8087 (dos.h)
Флаг микропроцессора (для DOS, Win16, Win32). Устанавливается в ненулевое значение, если логика автообнаружение кода запуска обнаруживает наличие сопроцессора. Эту логику можно переопределить установкой переменной операционной среды 87.
Переменная _argc (dos.h)
Содержит число аргументов командной строки (для DOS, Win16, Win32 и OS/2) - значение argc, переданное main при запуске программы.
Переменная _argv (dos.h)
Массив указателей на аргументы командной строки (для DOS, Win16, Win32 и OS/2). Элементы этого массива передаются программе при ее запуске.
Переменная _ctype (ctype.h)
Информационных массив символьных атрибутов (для DOS, Win16, Win32 и OS/2), индексируемых значением ASCII +1. Каждая запись это битовый набор, описывающий символ.
Переменная _daylight (time.h)
Указывает, требуется ли сохранение настраиваемого времени суток (для DOS, Win16, Win32 или OS/2). Используется функциями даты и времени. Принимает значения 1 (сохраненное время) и 0 (стандартное).
Переменная _directvideo (cohio.h)
Флаг, управляющий видеовыводом (для DOS, Win16, Win32). Определяет вывод непосредственно в видеопамять (1) или через вызовы BIOS в ПЗУ (0). По умолчанию равна 1. Эту переменную следует использовать только в символьных приложениях.
Переменная _environ (dos.h)
Позволяет обращаться к системным переменным операционной среды и представляет собой массив указателей на строки "переменная=значение" (для DOS, Win16, Win32 и OS/2). Значение в строке может быть пустым. При выполнении значения переменных среды передаются непосредственно программе.
Обращаться к _environ можно через getenv, а добавлять, изменять или удалять записи массива _environ - с помощью getenv.
Переменные errno, _doserrno, _sys_errlist, _sys_nerr (dos.h, errno.h)
Для печати сообщений об ошибке разрешает perror (для DOS, Win16, Win32 и OS/2). Функция perror использует эти переменные для вывода сообщений об ошибках.
| Переменная | Назначение |
|---|---|
| errno | Указывает тип ошибки при математическом или системном вызове. В других ситуациях не содержит кода ошибки. |
| _doserrno | Содержит фактический код ошибки операционной системы, когда вызов операционной системы дает ошибку. |
| _sys_errlist | Массив строк сообщений. В качестве индекса массива для поиска строки по номеру ошибки можно использовать errno. |
| _sys_nerr | Число строковых сообщений в _sys_nerr. |
Мнемонические обозначения в _sys_errlist показаны в следующей таблице:
| Мнемоника | Описание |
|---|---|
| E2BIG | Слишком длинный список аргументов. |
| EACCES | В разрешении отказано. |
| EBADF | Неверный номер файла. |
| ECHILD | Нет дочернего процесса (Ч). |
| ECONTR | Попытка удаления текущего каталога CurDir. |
| EDEADLOCK | Нарушение блокировки (Ч). |
| EDOM | Ошибка домена (*) или математического аргумента (Ч). |
| EEXIST | Файл уже существует. |
| EFAULT | Неизвестная ошибка. |
| EINTR | Прерванный функциональный вызов (Ч). |
| EINVACC | Недопустимый код доступа. |
| EINVAL | Недопустимый аргумент. |
| EINVDAT | Недопустимые данные. |
| EINDRV | Недопустимая спецификация диска. |
| EINVENV | Недопустимая операционная среда. |
| EINVFMP | Недопустимый формат. |
| EINVFNC | Недопустимый номер функции. |
| EINVMEM | Недопустимый адрес блока памяти. |
| EIO | Ошибка ввода-вывода (Ч). |
| EMFILE | Открыто слишком много файлов. |
| EMATOOLONG | Слишком длинное имя файла (Ч). |
| ENFILE | Слишком много открытых файлов. |
| ENMFILE | Файлов больше нет. |
| ENODEV | Нет такого устройства. |
| ENOENT | Нет такого файла или каталога. |
| ENOEXEC | Ошибка формата выполняемого файла. |
| ENOMEM | Не хватает памяти. |
| ENOPATH | Маршрут не найден. |
| ENOSPC | На устройстве не осталось места (Ч). |
| ENOTSAM | Не то же устройство. |
| ENXIO | Нет такого устройства или адреса (Ч). |
| EPERM | Операция не разрешена (Ч). |
| EPIPE | Нарушение конвейера (Ч). |
| ERANGE | Результат вне диапазона (*) или слишком велик (Ч). |
| EORFS | Файловая система доступна только по чтению (Ч). |
| ESPIPE | Неразрешенная операция установки позиции (Ч). |
| EXDEV | Перекрестная связь между устройствами. |
| EZER0 | Ошибка 0. |
(Ч) - только для 32-разрядных приложений.
(*) - только для 16-разрядных приложений.
Ниже перечислены мнемоники фактических кодов ошибок DOS, в которые может устанавливаться _doserrno (это значение может не отображаться через errno):
| Мнемоника | Код ошибки DOS |
|---|---|
| E2BIG | Неверная операционная среда. |
| EACCES | Доступ запрещен. |
| EACCES | Неверный доступ. |
| EACCES | Это текущий каталог. |
| EBADF | Неверный описатель. |
| EFAULT | Зарезервирован. |
| EINVAL | Неверные данные. |
| EINVAL | Неверная функция. |
| EMFILE | Слишком много открытых файлов. |
| ENOENT | Такого файла или каталога нет. |
| ENOEXEC | Неверный формат. |
| ENOMEM | Нет памяти. |
| ENOMEM | Плохой блок. |
| EXDEV | Неверный диск. |
| EXDEV | Не то же устройство. |
Переменная _floatconvert (stdio.h)
Компонует форматы с плавающей точкой (для DOS, Win16, Win32 и OS/2). Вывод с плавающей точкой требует компоновки подпрограмм преобразования. Для уменьшения размера такая компоновка автоматически не выполняется. Однако, она выполняется автоматически при использовании в программе математической подпрограммы или получении числа с плавающей точкой.
Переменная _fmode (fcntl.h)
Определяет заданный по умолчанию режим трансляции - текстовый или двоичный (для DOS, Win16, Win32 и OS/2). По умолчанию задается текстовый режим: при вводе возврат каретки/перевод строки транслируется в перевод строки, а при выводе наоборот.
Переменная _new_handler
Перехватывает операции распределения (для DOS, Win16, Win32 и OS/2). Содержит указатель на функцию без аргументов, возвращающую void. При невозможности распределения памяти будет вызываться функция, на которую указывает данная переменная. В качестве альтернативы можно использовать функцию _set_new_handler.
Переменные _osmajor, _osminor_, _osversion (dos.h)
Содержит основной и дополнительный номера версии операционной системы (для DOS, Win16, Win32 и OS/2).
Переменная _psp (dos.h)
Содержит адрес сегмента PSP для текущей программы (для DOS, Win16, Win32 и OS/2). PSP - это дескриптор процесса DOS, который содержит начальную информацию о программе.
Переменная _threadid (stddef.h)
Указатель на идентификатор нити (для DOS, Win32 и OS/2). Это значение длинного целого типа, идентифицирующее текущую выполняемую нить.
Переменные __throwExceptionName, __throwFileName, __throwLineNumber (except.h)
Генерируют информацию о порожденной исключительной ситуации (для DOS, Win16, Win32 и OS/2). Эти глобальные переменные позволяют получить имя и место возникновения особой ситуации (в виде текстовой строки).
Переменная _timezone (time.h)
Содержит разницу в секундах между местным временем и временем по Гринвичу (для DOS, Win16, Win32 и OS/2). Используется функциями даты и времени.
Переменная _tzname (time.h)
Массив указателей на имена временных поясов (для DOS, Win16, Win32 и OS/2).
Переменная _version (dos.h)
Содержит номер версии операционной системы (для DOS, Win16, Win32 и OS/2). Основной номер версии находится в старшем байте (или слове для 32-разрядного приложения).
Переменная _wscroll (conio.h)
Разрешает или запрещает прокрутку в консольных функциях ввода-вывода (для DOS, Win16, Win32 и OS/2). По умолчанию прокрутка разрешена - переменная имеет значение 1. При установке в 0 прокрутка запрещается. Данную переменную следует использовать только в текстовых приложениях.
Потоковые классы С++
Библиотека потоковых классов в С++ состоит из нескольких классов, распределенным по двум отдельным иерархическим деревьям. Данный справочный материал содержит некоторые наиболее полезные детали таких классов. Перечисляемые классы содержатся в различных файлах заголовков:
| Файл заголовка | Классы |
|---|---|
| constrea.h | conbuf, constream (только для приложений консольного режима). |
| iostream.h | ios, iostream, iostream_withassign, istream, istream_withassign, streambuf |
| fstream.h | filebuf, fstream, ostream, strstream, strstre- ambase, strstreambuf. |
Класс conbuf (constrea.h)
Специализирует streambuf для обработки консольного вывода.
Функции-элементы
| Constructor | Создает подключенный conbuf. |
| clreol | Очищает экран до конца текстового окна. |
| clrscr | Очищает заданный экран. |
| delline | Удаляет строку в окне. |
| gotoxy | Позиционирует курсор в заданной позиции окна. |
| highvideo | Выделяет символы повышенной яркостью. |
| insline | Вставляет пустую строку. |
| lowvideo | Выделяет символы пониженной яркостью. |
| normvideo | Задает нормальную интенсивность символов. |
| overflow | Выводит содержимое conbuf. |
| setcursotype | Задает вид курсора. |
| textattr | Задает атрибут текста. |
| textbackground | Задает текстовый фоновый курсор. |
| textmode | Переводит курсор в текстовый режим. |
| wherex | Получает горизонтальную позицию курсора. |
| wherey | Получает вертикальную позицию курсора. |
| window | Определяет активное окно. |
Класс constream (constrea.h)
Обеспечивает потоки вывода на консоль. Этот класс является производным от ostream и доступен только для приложений консольного режима.
Функции-элементы
| Constructor | Определяет для консоли неподсоединенный поток вывода. |
| clrscr | Очищает экран. |
| rdbuf | Возвращает указатель на назначенный для потока conbuf. |
| textmode | Переводит экран в текстовый режим. |
| window | Определяет активное окно. |
Класс filebuf (fstream.h)
Специализирует streambuf для ввода и вывода символов. Управляет выделением и удалением буфера, а также установкой позиции в файле. Позволяет с помощью соответствующего конструктора или функции-элемента использовать небуферизованный ввод-вывод. По умолчанию файлы открываются в режиме openprot и допускают чтение или запись. Этот класс обеспечивает только базовые средства для ввода-вывода. Операции ввода-вывода выполняются с помощью функций streambuf.
Элементы данных
| openprot | Заданная по умолчанию защита файла. Определяет разрешение чтения из файла и записи в файл. |
Функции-элементы
| constructor | Создает filebuf, не подключенный к файлу, или подключенный к файлу с заданным дескриптором. |
| attach | Связывает закрытый filebuf с файлом, заданным дескриптором. Если файловый буфер уже открыт, возвращает NULL. |
| close | Выводит содержимое буфера и закрывает файл. Обычно не требует явного вызова, т.к. закрытие обеспечивается деструктором. В случае ошибки возвращает 0. |
| fd | Возвращает дескриптор файла или EOF. |
| is_rtl_open | Возвращает в случае открытия файла ненулевое значение. |
| open | Открывает файл, заданный именем, и подключается к нему. Режим открытия задается аргументом режима. |
| overflow | Выводит буфер по указанному назначению. Выполняемые действия должны определяться в каждом классе. |
| seekoff | Устанавливает указатель по заданному смещению, перемещая его в заданном направлении относительно текущей позиции. Возвращает значение позиции. |
| setbuf | Выделяет буфер заданного размера для использования в качестве в filebuf. Если файл уже открыт, а буфер выделен, то происходит ошибка, и sefbuf возвращает NULL. |
| sync | Согласовывает внутренние структуры данных и внешнее представление потока. |
| underflow | Делает ввод доступным. Вызывается при отсутствии данных во входном буфере. |
Класс fstream (fstream.h)
Этот потоковый класс является производным от fstreambase и iostream и выполняет с помощью filebuf одновременный ввод и вывод.
Функции-элементы
| Constructor | Создает fstream, не подключенный или подключенный к файлу с заданным дескриптором. |
| open | Открывает для fstream файл, заданный именем и режимом открытия. |
| rdbuf | Возвращает используемый filebuf. |
Класс fstreamable (fstream.h)
Этот производный от ios класс обеспечивает общие для файловых потоков операции. Он используется в качестве базового для fstream, ifstream и ofstream.
Функции-элементы
| Constructor | Создает fstreambase, не подключенный или подключенный к файлу с заданным дескриптором. |
| attach | Связывает с дескриптором открытого файла. |
| open | Закрывает соответствующий filebuf и файл. |
| rdbuf | возвращает используемый filebuf. |
| setbuf | Резервирует указанную область памяти, способную вместить указанное число байт. |
Класс ifstream (fstream.h)
Этот производный от fsreambase потоковый класс обеспечивает операции ввода через filebuf.
Функции-элементы
| Constructor | Создает ifstrem, не подключенный к файла или подключенный к заданному или открытому файлу. |
| open | Открывает файл для ifstream. |
| rdbuf | Возвращает используемый filebuf. |
Класс ios (iostream.h)
Обеспечивает общие операции для ввода и
вывода. Производные от него классы (istream, ostream,
iostream) специализируют ввод-вывод с помощью
операций форматирования высокого уровня. Класс
ios является базовым для istream, ostream, fstreambase и strstreambase.
Флаги формата
Элементы данных
Функции-элементы
Класс iostream (iostream.h)Данный производный от istream и ostream класс представляет собой смесь своих базовых классов для ввода и вывода в поток. Он является базовым для fstream и strstream. Функции-элементы
Класс iostream_withassign (iostream.h)Этот класс представляет собой iostream c добавленными оператором присваивания. Функции-элементы
Класс istream (iostream.h)Обеспечивает форматированный и неформатированный ввод из streambuf. Для фундаментальных типов операция >> переопределяется. Базовым для данного класса является класс ios. Функции-элементы
Класс istream_withassign (iostream.h)Этот класс представляет собой istream с добавленной операцией присваивания. Функции-элементы
Класс istream (strstrea.h)Обеспечивает для strstreambuf операции ввода. Этот класс является производным от strstreambase и istream. Функции-элементы
Класс ofstream (fstream.h)Является производным от fstreamable и ostream и обеспечивает для filebuf операции ввода. Функции-элементы
Класс ostream (iostream.h)Обеспечивает для streambuf форматированный или неформатированный вывод. Для всех фундаментальных типов операция << переопределяется. Этот производный от ios класс является базовым для constream, iostream, ofstream, ostrstream и ostream_withassing. Функции-элементы
Класс ostream_withassign (iostream.h)Этот класс представляет собой ostream с добавленной операцией присваивания. Функции-элементы
Класс oststream (strstrea.h)Является производным от strstreambase и ostream и обеспечивает для strstreambuf операции вывода. Функции-элементы
Класс streambuf (iostream.h)Это базовый класс для всех других классов буферизации. Он обеспечивает буферный интерфейс между вашими данными и областями памяти, такими как память физических устройств. К содержимому этих областей можно обращаться по указателю. Функции-элементы
Класс strstreambase (strstrea.h)Специализирует ios для строковых потоков. За исключением функции-элемента strstreambase::rdbuf, весь класс является защищенными. Этот класс является базовым для strstream, istrstream и ostrstream. Функции-элементы
Класс strstreambuf (strstrea.h)Специализирует streambuf для форматирования в памяти. Функции-элементы
Класс strstream (strstrea.h)Обеспечивает для strstreambuf одновременный ввод и вывод. Этот класс является производным от strstreambase и iostream. Функции-элементы
Постоянные потоковые классы и макрокоманды Borland поддерживает постоянные потоки, состоящие из иерархии класса и макрокоманд, помогающих вам строить потоковые объекты. Иерархия классов постоянных потоковИерархия классов постоянных потоков представляется следующей схемой:
pstream
^ ^ ^
TStreamable
^ ^
ipstream opstream fpbase
^ ^ ^ ^
ofpstream
ifstream
Двойная стрелка указывает, что TStreamableBase - это дружественный класс. Класс fpbase (objstm.h)Обеспечивает базовые операции, общие для всех потоков ввода-вывода объектного файла. Функции-элементы
Класс ifpstream (objstrm.h)Обеспечивает базовый класс для чтения (извлечения) потоковых объектов из потоков. Функции-элементы
Класс ipstream (objstrm.h)Обеспечивает базовый класс для чтения (извлечения) альтернативных объектов. Функции-элементы
Класс pstream (objstrm.h)Это базовый класс для управления потоковыми объектами. Элементы данных
Функции-элементы
Класс TStreamableBase (objstrn.h)Классы, наследующие из TStreamableBase, называются потоковыми классами. Это означает, что их объекты могут записываться в потоки и считываться из них. Для построения собственных потоковых классов также нужно использовать этот базовый класс. Можно воспользоваться и множественным наследованием. Функции-элементы
Класс TStreamable (streambl.h)Используется частным классом базы данных и pstream для регистрации в потоковом классе. Функции-элементы
Класс TStreamer (objstrm.h)Базовый класс для всех потоковых объектов. Функции-элементы
Макрокоманда __DELTA (streambl.h)Вычисляет расстояние (в байтах) между базой потокового объекта и началом компонента TStreamableBase этого объекта. Макрокоманды, начинающиеся с DECLAREМакрокоманда DECLARE_STREABABLE (objstrm.h)Используется в определении класса для добавления элементов, необходимых для организации потока. Так как она содержит спецификаторы доступа, за ней должен следовать спецификатор доступа (или он должен использоваться в конце определения класса). Первым параметром должна быть макрокоманда, расширяющаяся по условию в __import или __export (в зависимости от того, экспортируется или импортируется класс из DLL). Второй параметр - имя потокового класса, а третий - номер версии объекта. Макрокоманда DECLARE_STREAMABLE_FROM_BASE (objstrm.h)Используется аналогично DECLARE_STREAMABLE. Ее не следует использовать, если класс должен записываться и считываться с помощью функций Read и Write, определенных без изменения в своем базовом классе. Обычно это происходит, если производный класс переопределяет виртуальные функции базового класса или предусматривает несколько конструкторов, но не добавляет элементов данных. Макрокоманда DECLARE_ABSTRACT_STREAMABLE (objstrm.h)Используется в абстрактном классе и содержит ядро потокового кода. Описывает функции Read и Write, определения которых вы должны предусмотреть, и функцию Buyild, вызывающую конструктор TStreabableClass. Описания параметров см. в DECLARE_STREAMABLE. Макрокоманда DECLARE_STREAMER_FROM_BASE (objstrm.h)Используется в DECLARE_STREAMABLE_FROM_BASE и описывает вложенный класс Streamer без функций Read и Write. Описания параметров см. в DECLARE_STREAMABLE. Макрокоманда DECLARE_ABSTRACT_STREAMER (objstrm.h)Используется в DECLARE_ABSTRACT_STREAMABLE и описывает вложенный класс Streamer без функции Build. Описания параметров см. в DECLARE_STREAMABLE. Макрокоманда DECLARE_STREAMABLE_OPS (objstrm.h)Описывает инсертеры и экстракторы. Для классов шаблонов должна использовать в качестве макроаргумента class<...>. В других случаях используется только имя класса. Макрокоманда DECLARE_STREAMABLE_CTOR (objstrm.h)Описывает конструктор, вызываемый функцией Streamer::Build. Макрокоманды, начинающиеся с IMPLEMENTМакрокоманды IMPLEMENT_STREAMABLE1..4 (objstrm.h)Макрокоманды IMPLEMENT_STREAMABLE генерируют для класса регистрационный объект через IMPLEMENT_STREAMABLE_CLASS и через IMPLEMENT_ABSTRACT_STREABABLE генерируют различные необходимые для потокового класса Функции-элементы. Макрокоманда IMPLEMENT_STREAMABLE используются, когда класс не имеет других базовых классов, кроме TStreamableBase. Ее единственным параметром является имя класса. Нумерованные версии этой макрокоманды (IMPLEMENT_STREAMABLE1, IMPLEMENT_STREAMABLE2 и т.д.) используются для классов, имеющих другие базовые классы. Макрокоманда IMPLEMENT_STREAMABLE_CLASS (objstrm.h)Строит экземпляр класса TStreamableClass. Макрокоманды IMPLEMENT_STREAMABLE_CTOR1..4 (objstrm.h)Определяют конструктор, вызываемый функцией Build. В соответствующей макрокоманде должны перечисляться все базовые классы. Макрокоманда IMPLEMENT_POINTER (objstrm.h)Создает экземпляр операции извлечения указателя (>>). Макрокоманда IMPLEMENT_CASTABLE (objstrm.h)Устанавливает надежный по типу идентификатор с приведенным типом. Макрокоманды IMPLEMENT_CASTABLE1..5 (objstrm.h)Реализуют код, поддерживающий надежный по типу механизм приведения типа. Макрокоманда IMPLEMENT_STREAMER (objstrm.h)Определяет конструктор Streamer. Макрокоманды IMPLEMENT_ABSTRACT_STREAMABLE1..5 (objstrm.h)Макрокоманда IMPLEMENT_STREAMABLE_FROM_BASE (objstrm.h)Эта макрокоманда расширяется в IMPLEMENT_STREAMABLE_CLASS (которая строит TStreamableClass), IMPLEMENT_STREAMABLE_CTOR1 и IMPLEMENT_STREAMABLE_POINTER. Назад | Содержание | Вперед |