Реферат: Turbo C++ Programer`s guide
В числоопций,которые могут быть заданы в #pragma option только в
состоянии лексического анализа компилятора, входят:
-Efff (строка с ассемблерным
именем)
-f* (любая опция плавающей
точки, кроме -ff)
-l# (значащие символы
идентификатора)
-m* (любая опция модели памяти)
-nddd (выходная директория)
-offf (имя выходного файла fff)
-u (использование символов
подчеркивания в именах cdecl)
-z* (опция задания любого имени
сегмента)
Прочие опции могут изменяться где угодно. Следующие
опции оказывают воздействие на компилятор только если они изменяются между объявлениями
функций или объектов:
-1 Управление
набором команд
-2 Управление
набором команд
-a Управление выравниванием. (Отметим, что
выравнивание компонентов структурыустанавливается в точке определения
структуры, а не далее, при использовании этой структуры объектами.)
-ff Управление быстрыми
операциями с плавающей точкой
-G Генерация кода,
оптимизированного по быстродействию
-k Стандартное
управление стековым фреймом
-N Управление
контролем стека
-O Управление
оптимизацией
-P Установка по
умолчанию соглашений о связях Pascal
-r и -rd Управление регистровыми
переменными
-v Управление отладкой
по действиям
-y Управление строчной
информацией
Следующие
опциимогут изменяться в любой момент и оказывают немедленное воздействие на
компилятор:
-A Управление ключевыми
словами
-C Управление
вложенностью комментариев
-d Слияние повторяющихся
строк
-gn Остановка
компиляции после n предупреждений
-jn Остановка
компиляции после n ошибок
-K Тип char
устанавливается как unsigned
-wxxx Предупреждение (то же самое, что
и #pragma warn)
Любые из имеющих два переключающихся состояния
опций (такие как -a или -K) могут быть переведены во включенное или выключенное
состояние, как это делается в командной строке. Дополнительно имеется
возможность задавать их с точкой (.), что устанавливает такие опции в
состояние, задаваемое командной строкой.
Директива #pragma saveregs
Директива #pragma saveregs гарантирует, что при
входе в функцию hugeзначения всехрегистров останутся без изменений. Данная
директива иногда бывает нужна для интерфейса с кодами на языкеассемблера.
Директивадолжнанаходиться непосредственно перед определением функции. Ее
действие распространяется только на данную функцию.
Директива #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)
isalpha
(ctype.h) iscntrl (ctype.h) isgraph (ctype.h)
islower
(ctype.h) ispunct (ctype.h) isupper (ctype.h)
isprint (ctype.h) isspace
(ctype.h) isxdigit(ctype.h)
Подпрограммы
преобразования -----------------------------
Данные подпрограммы выполняют преобразования
символов и строк из алфавитного в различныечисловые представления (числа с
плавающей точкой, целые числа, long) иобратно, а также преобразования символов
верхнего регистра к нижнему, и обратно.
atof (stdlib.h) itoa
(stdlib.h) _tolower (ctype.h)
atof (stdlib.h) itoa
(stdlib.h) tolower (ctype.h)
atof (stdlib.h) strtod
(stdlib.h) _tolower (ctype.h)
ocvt (stdlib.h) strtol
(stdlib.h) tolower (ctype.h)
fcvt (stdlib.h) strtcul
(stdlib.h) ultoa (stdlib.h)
gcft (stdlib.h) toascil
(ctype.h)
Подпрограммы
управления директориями-----------------------
Эти подпрограммы манипулируют директориями и
именами пути доступа.
cndir(dir.h) fnsplit
(dir.h) mkdir (dir.h)
findfirst
(dir.h) getcurdir (dir.h) mktemp (dir.h)
findnext(dir.h) getcwd (dir.h)
rmdir (dir.h)
fnmerge(dir.h) detdisk
(dir.h) searchpath(dir.h)
setdisk (dir.h)
Диагностические
подпрограммы-------------------------------
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40
|