46019 (665326), страница 24
Текст из файла (страница 24)
Директива #pragma warn
Данная директива позволяет переопределять конкретные опции командной строки -wxxx (или управлять опцией Display Warnings в диалоговом поле Options \! Compiler \! Messages).
Например, если в вашем исходном коде имеются директивы
#pragma warn +xxx
#pragma warn -yyy
#pragma warn .zzz
то выдача предупреждения xxx будет разрешена (даже если в меню Options \! Compiler \! Messages она была переведена в состояние off), предупреждения yyy запрещена, а статус выдачи сообщения zzz будет восстановлен в то состояние, которое было к моменту начала компиляции файла.
Полный список трехбуквенных сокращений и сообщений, к которым они относятся, см. в Главе 4, "Компилятор командной строки" в Руководстве пользователя.
Предопределенные макросы
Turbo C++ имеет следующие предопределенные глобальные идентификаторы. За исключением __cplusplus, каждое из них и начинается, и заканчиваетсядвумя символами подчеркивания (__). Эти макросы также называют буквальными константами.
__CDECL__
Данный макрос специфичен для Turbo C++. Он сообщает о том, что флаг -p не использовался (меню Cflling Conventions...C) : он устанавливается равным целочисленной константе 1, если -pне использовался; в противном случае он неопределен.
Следующие символические имена определяются согласно выбранной во время компиляции модели памяти:
__COMPACT__ __MEDIUM__
__HUGE__ __SMALL__
__LARGE__ __TINY__
Для конкретной компиляции определенным является только один из этих макросов; прочие, по определению, не определены. Например, если при компиляциивыбрана модель памяти small, то макрос __SMALL__ определен, а остальные неопределены, поэтому директива
#if defined(__SMALL__)
даст значение "истина", а
#if defined(__HUGE__)
либо любая другая из оставшихся) даст значение "ложь". Фактическое значение любого из этих макросов, когда он определен, равно 1.
__cplusplus
Данный макрос специфичен для Turbo C++. Он позволяет написать модуль, который в некоторых случаях будет компилироваться в С, а в некоторых - в С++.Использование условных директив компиляции позволяет управлять, какие части программы для С и С++ будут включены в компиляцию.
__DATE__
Данный макрос дает дату начала обработки препроцессором данного исходного файла (в виде строкового литерала).
Каждое включение __DATE__ в данный файл дает одно и то же значение, независимо от того, сколько времени продолжается обработка файла препроцессором. Дата имеет форму mmmddyyyy,где mmm это месяц (Jan, Feb и т.д.), dd равно числу месяца (от 1 до 31, причем если это число меньше 10, то первый символ d равен пробелу), а yyyy это год (1990, 1991 и т.д.)
__FILE__
Данныймакрос дает имя текущего обрабатываемого препроцессором исходного файла (в виде строкового лите-
рала). Когда препроцессор обрабатывает директиву #include
или #line, либопри завершении обработки включаемого файла,
данный макрос соответствующим образом меняет свое значение.
__LINE__
Данный макрос дает количество обработанных препроцессором к данному моменту строк текущего исходного файла. Обычно первая строка исходного файла определяется с номером 1, хотя на это может повлиять директива #line. Информацию о директиве #line см. на стр. 144 оригинала.
__MSDOS__
Данный макрос специфичен для Turbo C++. Он дает целочисленную константу 1 для всех случаев компиляции.
__OVERLAY__
Данный макрос специфичен для С++. Он предопределен равным 1, еслимодуль компилируетсяс опцией -Y (включена поддержка оверлейных структур). Если оверлейные структуры не поддерживаются, то данный макрос неопределен.
__PASCAL__
Данный макрос специфичен для С++. Он сообщает о том, чтобыл использован флаг -p. Макрос установлен равным целочисленной константе 1, если флаг -p использовался; в противном случае он неопределен.
__STDC__
Данный макрос определен равным константе 1, если компиляция выполняется при установленном флаге совместимости с ANSI (-Aили менюANSI Keywords Only...On); в противном случае макрос неопределен.
__TIME__
Данный макрос дает время начала обработки препроцессором текущего исходного файла (в виде строкового литерала).
Как и в случае макроса __DATE__, каждое включение __TIME__ будет содержать одно и то же значение, независимо от того, сколько времени продолжалась обработка файла. Он имеет формат hh:vv:ss, где hh это часы (от 00 до 23), mm это минуты (от 00 до 59), а ss это секунды (от 00 до 59).
__TURBOC__
Данный макрос специфичендля С++. Он дает номер текущей версии TurboC++ ввиде шестнадцатиричной константы. Например, версия 1.0 будет представлена в виде 0x0100.
Глава 2. Перекрестные ссылки по библиотеке исполняющей системы
Данная глава содержит обзор библиотечных подпрограмм Turbo C++ и включаемых файлов.
В данной главе
- объясняется, зачем вам могут понадобиться исходные коды библиотеки исполняющей системы Turbo C++
- перечисляются и описываются файлы заголовка
- библиотечные подпрограммы группируются в соответствии с различными категориями выполняемых ими задач.
Turbo C++ поставляется с более чем 450 функциями и макросами, которые вы можете вызыватьиз своей программы для выполнения широкого круга задач, включая задачи ввода/вывода как высокого, так и низкого уровня, манипуляции с потокамии файлами, распределенияпамяти, преобразования данных, математических вычислений имногиедругие. Эти функции и макросы, называемые библиотечными подпрограммами, подробно описаны в Справочнике по библиотеке.
Подпрограммы Turbo C++содержатся в библиотечных файлах (Cx.LIB, CPx.LIB, MATHx.LIB и GRAPHICS.LIB). Поскольку TurboC++ поддерживает шесть различных моделей памяти, каждая модель, за исключением модели tiny, имеет свой собственный библиотечный файл и файл математических функций, в которых находятся версии этих подпрограмм специально для соответствующей модели памяти. (Модель tiny использует одни файлы с моделью small).
В С++ всегда нужно использовать прототипы. Дополнительную информацию о прототипах функций см. на стр.60 оригинала).
Turbo C++ является реализацией последнего стандарта ANSI C, который, помимо всего прочего, позволяет (и усиленно рекомендует) задавать прототипы функций для используемых в вашей программе на С подпрограмм.
Библиотечные подпрограммы Turbo C++ объявляются со своими прототипами в одном или более файлов заголовка.
Зачем нужен доступ к исходным кодам библиотеки исполняющей системы
Библиотека исполняющей системы Turbo C++ содержит свыше 450 функций, относящихся к широкому диапазону задач: управление IBM PC на нижнем уровне, интерфейс с DOS, ввод/вывод, управление обработкой, манипуляции со строками и памятью, математические вычисления, сортировка и поиск, и т.д. Существует несколько веских причин, по которым вам может понадобиться доступ к исходным кодам этих функций:
- Может обнаружиться, что некоторая функция, которую вы собираетесь написать, аналогична, однако не полностью эквивалентна, функции из библиотеки. Имея доступ к ее исходному коду в библиотеке исполняющей системы, выимеетевозможность скорректировать еепо своим требованиям, что позволит избежать создания собственной отдельной функции.
- Иногда при отладке требуется побольше узнать о том, как устроена та или иная библиотечная функция. Доступ к исходным кодам библиотеки исполняющей системы в данной ситуации весьма полезен.
- Когда вы не можете в точности выяснить, что конкретно делает та или иная функция, полезно взглянуть на ее исходный код.
- Вам может понадобиться убрать ведущие символы подчеркивания в символических именах С. Это можно сделать только имея доступ к исходным кодам функций библиотеки исполняющей системы.
- Вы многому можете научиться, изучая сжатые, профессионально написанные исходные коды библиотечных функций.
По всем этим причинам, а также по многимдругим, вам может понадобитьсядоступк исходным кодам библиотекиисполняющей системы Turbo C++. Поскольку фирма Borland придерживается принципа "открытой архитектуры", мы предоставляем возможность лицензированного доступа к исходным кодам библиотеки исполняющей системы Turbo C++. Все, что вам нужно для этого сделать,это заполнить бланк, поставляемый с пакетом Turbo C+ +, приложить платежный чек, и вам будутвысланы исходные коды библиотеки исполняющей системы Turbo C++.
Файлы заголовка Turbo C++
Файлы заголовка, определяемые стандартом ANCI C, соответственно обозначены на полях. Файлы заголовка С++ также обозначены на полях слева.
Файлы заголовка, называемые также включаемыми файлами, содержат объявления прототипов библиотечных функций. В них также находятся определения типов данных и символических имен констант библиотечных функций, а также глобальные переменные, определяемые TurboC++ и библиотечными функциями. Имена файлов заголовка и их содержимое в библиотеках Turbo C ++ следуют стандарту ANSI C.
alloc.h Объявляет функции управления памятью (распре-
деление и отмена распределения памяти и т.д.)
ANSI C assert.h Определяет отладочный макрос assert
C++ bcd.h Определяет класс С++ bcd и перегруженные опе-
рации для класса bcd и математические функции
для bcd
bios.h Объявляет различные функции, используемые при
вызове подпрограмм ROM BIOS IBM PC
C++ complex.h Объявляет комплексные математические функции С++
conio.h Объявляет различные функции, используемые при
вызове подпрограмм DOS ввода/вывода с консоли
ANSI C ctype.h Содержит информацию, используемую макросами символьной классификации и символьных преобразований (такими, как isalpha и toascii)
dir.h Содержит структуры, макросы и функции для
работы с директориями и путями доступа
dos.h Определяет различные константы и содержит объявления, необходимые при вызовах DOS и специальных вызовах 8086
ANSI C errno.h Определяет мнемонические константы кодов
ошибок
fcntl.h Определяет символические константы, исполь-
зуемые совместно с библиотечной подпрограммой
open
ANSI C float.h Содержит параметры подпрограмм обработки чисел с плавающей точкой.
C++ fstream.h Объявляет классы потоков С++, поддерживающие ввод-вывод в файлы
C++ generic.h Содержит макрос для объявлений родовых файлов
graphics.h Объявляет прототипы графических функций
io.h Содержит структуры и объявления подпрограмм
ввода/вывода низкого уровня
C++ iomanip.h Объявляет манипуляторы ввода/вывода потоков С++ и содержит макрос для создания параметри-
зованных манипуляторов
C++ iostream.h Объявляет подпрограммы (ввода/вывода) потоков базового (версии 2.0) С++
ANSI C limits.h Содержит параметры среды программирования, информацию об ограничениях времени компиляции, а также численные диапазоны интегральных типов
ANSI C locale.h Объявляет функции, содержащие информацию, специфичную для конкретной страны и языка
ANSI C math.h Объявляет прототипы математических функций; определяет макрос HUGE_VAL и объявляет структуру исключения, используемую подпрограммой matherr
mem.h Объявляет функции манипулирования памятью.
(Многие из них также определены в string.h)
process.h Содержит структуры и объявления для функций
spawn... и exec...
ANSI C setjmp.h Определяет тип jmp_buf, используемый функциями
longjmp и setjmp, и объявляет подпрограммы
longjmp и setjmp
share.h Определяет параметры, используемые в функциях,
работающих с разделением файла
ANSI C signal.h Определяет макросы, используемые для чтения списков аргументов функций, объявленных как принимающие переменное число аргументов (например, vprintf, vscanf и т.д.)
ANSI C stddef.h Определяет несколько общих типов данных и макросов
ANSI C stdio.h Определяет типы данных и макросы, необходимые для пакета стандартного ввода/вывода (Standard I/O Package), определенного Керниганом и Ритчи и расширенного в Системе UNIX V.
Определяет предопределенные потоки стандартного ввода/вывода stdin, stdout, stdprn и stderr, а также объявляет подпрограммы ввода/ вывода уровня потоков
C++ stdiostr.h Объявляет классы потоков С++ для использования в файловых структурах stdio FILE.
ANSI C stdlib.h Объявляет некоторые широко используемые подпрограммы: подпрограммы преобразования, подпрограммы поиска/сортировки и прочие
C++ stream.h Объявляет подпрограммы (ввода/вывода) потоков С++ (версии 1.2)
ANSI C string.h Объявляет несколько подпрограмм строковых манипуляций и манипуляций с памятью
C++ strstrea.h Объявляет классы потоков С++ для работы с байтовыми массивами в памяти
sys\stat.h Объявляет символические константы, используемые при открытии и создания файлов
sys\timeb.h Объявляет функцию time и структуру timeb,
возвращаемую time
sys\types.h Объявляет тип type_t, используемый функциями
времени
ANSI C time.h Определяет структуру, заполняемую подпрограммами преобразования времени asctime, localtime и gmtime, а также тип, используемый подпрограммами ctime, difftime, gmtime, localtime и stime; также содержит прототипы этих подпрограмм.
values.h Определяет важные константы, включая машинозависимые константы; обеспечивает совместимостью с системой UNIX V
Категории библиотечных подпрограмм
Библиотечные подпрограммы Turbo C++выполняют большое количество различныхзадач.В данном разделе перечислены все подпрограммы, а также включаемые файлы, в которых они объявлены, разбитые на несколько общих категорий по выполняемым задачам. Полную информацию по перечисленным ниже функциям см.в главе 1 "Библиотека исполняющей системы" Справочника по библиотеке.
Подпрограммы классификации ------------------------------
Данные подпрограммы классифицируют символы ASCII как буквы, управляющие символы, знаки пунктуации, символы верхнего регистра и т.д.
isalnum (ctype.h) isascil (ctype.h) isdigt (ctype.h)