Глобальные переменные
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. Назад | Содержание | Вперед |