Turbo C++ Programer`s guide

Turbo C++ Programer`s guide
Первый символ должен являться буквой или символом подчеркивания Тело функции, представляющее собой коды, выполняемые при вызове функции Выражение-приведения это пустой (null) указатель Е1 является указателем, а Е2 - константой типа пустого указателя Выражение-инремента выполняет приращения одного или нескольких цикловых счетчиков Вызвать конструктор тем же образом, что и обычную функцию, нельзя. Вызов деструктора допустим только с полностью квалифицированным именем Инициализатор конструктора (см. "инициализатор-конструктора" в описании синтаксиса декларатора класса в таблице Или 16). Ноль означает по умолчанию десятичную Мы будем обозначать все семейство математических сопроцессоров 80x87 термином "сопроцессор" В режиме эмуляции 80Х87 циклический переход в регистрах, а также ряд других особенностей 80х87 не поддерживается GrOk No error Нет ошибки Кроме того, обратите внимание на то, что функция прерывания выполняет выход с помощью команды IRET (возврата из прерывания) Как идентифицировать диагностические сообщения Что происходит, когда доступ к компоненту объекта типа объединения происходит при помощи компонента другого типа Печатаемые диагностические сообщения и поведение при завершении функции assert
668870
знаков
13
таблиц
0
изображений

TURBO C++

Version 1.0

Programmer's Guide

Оглавление

Введение................................................... Содержание данного руководства............................

Глава 1 Стандарт языка Turbo C++...................

Синтаксис и терминология..................................

Грамматические правила структуры фраз и лексики языка.....

Пробельные символы........................................

"Склеивание" строк символом \........................... Комментарии...............................................

Комментарии C...........................................

Вложенные комментарии...................................

Комментарии C++.........................................

Разделители комментариев и пробелы...................... Лексемы...................................................

Ключевые слова..........................................

Идентификаторы..........................................

Константы...............................................

Константы и их внутреннее представление................. Описание операций.........................................

Унарные операции ...................................... Бинарные операции....................................... Пунктуаторы ..........................................

Объявления................................................ Объекты .............................................. Именующие выражения (Lvalues) ........................ Типы и классы памяти ................................. Контекст ............................................. Видимость............................................... Продолжительность....................................... Единицы трансляции ..................................... Компоновка .............................................

Синтаксис объявления...................................... Предварительные определения .......................... Возможные объявления ................................. Внешние объявления и определения ..................... Спецификаторы типа ..................................... Таксономия типа ...................................... Фундаментальные типы ................................. Инициализация........................................... Простые объявления...................................... Спецификаторы класса памяти............................. Модификаторы............................................ Сложные объявления и деклараторы........................

Указатели.................................................

Указатели объектов......................................

Указатели функций....................................... Объявления указателей ................................ Указатели и константы ................................ Арифметические операции с указателями ................ Преобразования указателей............................... Объявления ссылок в С++ ..............................

Массивы ................................................ Функции...................................................

Объявления и определения ............................. Объявления и прототипы ............................... Объявления ............................................. Объявления формальных параметров ..................... Вызовы функций и преобразования аргументов .............

Структуры................................................. Структуры без тегов и определения типов (typedef)....... Объявления компонентов структуры ..................... Структуры и функции .................................. Доступ к компоненту структуры ........................ Выравнивание по границе слова ........................ Пространство имен структур ............................. Неполные объявления .................................. Битовые поля .........................................

Объединения............................................... Объявления объединений ................................

Перечислимые данные.......................................

Выражения................................................. Выражения и Turbo C++ ................................ Последовательность вычислений ........................ Ошибки и переполнения ................................

Семантика операций........................................

Постфиксные и префиксные операции....................... Операции инкремента и декремента ..................... Унарные операции ..................................... Операция sizeof ..................................... Операции типа умножения .............................. Операции типа сложения ............................... Операции поразрядного сдвига ......................... Операции отношения ..................................... Операции типа равенства .............................. Операция поразрядного И & ............................. Операция поразрядного исключающего ИЛИ ^............... Операция поразрядного включающего ИЛИ \!............... Операция логического И &&.............................. Операция логического ИЛИ \!\!.......................... Условная операция ?:.................................... Операции присвоения .................................. Операция с запятой......................................

Операторы................................................. Блоки ................................................ Операторы-с-метками .................................. Операторы-выражения .................................. Операторы выбора ..................................... Операторы итерации ..................................... Операторы перехода .....................................

С++....................................................... Ссылки ............................................... Операция доступа к контексту ......................... Операции new и delete ................................ Классы ............................................... Виртуальные базовые классы ............................. "Друзья" классов (friend)............................... Конструкторы и деструкторы ............................. Конструкторы ......................................... Деструкторы .......................................... Перегруженные операции ............................... Операции-функции ...................................... Виртуальные функции..................................... Абстрактные классы ..................................... Контекст С++ .........................................

Директивы препроцессора Turbo C++.........................

Пустая директива # .....................................

Директивы #define и #undef ............................. Включение файлов директивой #include ................. Условная компиляция .................................. Директива управления нумерацией строк #line .......... Директива #error ..................................... Директива #pragma....................................... Предопределенные макросы .............................

Глава 2. Перекрестные ссылки по библиотеке исполняющей системы................................................... Зачем нужен доступ к исходным кодам библиотеки исполняющей

системы.................................................. Файлы заголовка Turbo C++................................. Категории библиотечных подпрограмм........................

Глава 3 Потоки С++..................................

Новые потоки вместо старых................................

Использование потоков 2.0................................. Что такое поток? ...................................... Библиотека iostream .................................... Четыре стандартных потока ............................. Вывод ................................................ Ввод.................................................... Инициализация потоков ................................. Простой ввод/вывод в файл ............................. Состояния ошибки потока ввода/вывода....................

Использование потоков прошлых версий......................

Рекомендации по переходу к потокам версии 2.0............. Глава 4 Модели памяти, операции с плавающей точкой и

оверлеи...................................................

Модели памяти.............................................

Регистры 8086...........................................

Сегментация памяти......................................

Указатели...............................................

Шесть моделей памяти.................................... Программирование с использованием различных моделей памяти

адресные модификаторы...................................

Объявление ближних или дальних функций ................ Объявление указателей near, far или huge................ Использование библиотечных файлов....................... Компоновка смешанных модулей ..........................

Опции типа чисел с плавающей точкой....................... Эмулирование платы 80х87................................ Получение кода только для машин с 80х87 ............... Получение кода без операций с плавающей точкой ........ Опция быстрых вычислений с плавающей точкой ........... Переменная операционной среды 87........................ Регистры и 80х87 ......................................

Математические операции с комплексными числами............

Использование двоично-десятичной (BCD) математики....... Использование оперативной памяти Turbo C++................ Оверлеи (VROOMM)..........................................

Работа программ с оверлеями.............................

Требования..............................................

Использование оверлеев .................................

Разработка программ с перекрытиями...................... Свопинг ............................................... Дополнительная память (EMS)............................. Расширенная память (Ext)................................

Глава 5 Видео функции.......................

Несколько слов о видео режимах............................ Несколько слов о текстовых и графических окнах............

Что такое окно ? ..................................... Что такое графическое окно ? .......................... Координаты..............................................

Программирование в текстовом режиме....................... Функции консольного ввода/вывода ....................... Текстовые окна.......................................... Тип text_mode........................................... Цвета текста .......................................... Высокоскоростной вывод: переменная directvideo .........

Программирование в графическом режиме.....................

Функции библиотеки graphics.............................

Управление цветом на CGA................................ Глава 6....................................................

Смешанное программирование................................ Последовательности передачи параметров ...............

Подготовка к вызову .ASM из Turbo C++..................... Упрощенные сегментные директивы ....................... Стандартные сегментные директивы ..................... Определение данных - констант и переменных ............. Определение глобальных и внешних идентификаторов .....

Подготовка к вызову Turbo C++ из .ASM.....................

Ссылки к функциям....................................... Ссылки к данным ......................................

Определение подпрограмм на языке ассемблера............... Передача параметров..................................... Обработка значений возврата ............................

Соглашения о регистрах....................................

Вызов функций С из модулей .ASM...........................

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

Псевдопеременные ..................................... Встраиваемые ассемблерные коды ....................... Функции прерывания...................................... Практические примеры программ низкого уровня .........

Глава 7 Сообщения об ошибках......................

Сообщения об ошибках времени выполнения................... Сообщения об ошибках компилятора.......................... Фатальные ошибки.......................................... Ошибки.................................................... Предупреждения............................................

Приложение АСтандарты ANSI, зависящие от реализации................................................

Введение

Документ "Начало работы" содержит обзор всего комплекта документации к Turbo C++. Информация о том, как с наибольшей эффективностью использовать Руководства по Turbo C++, содержится во введении и главе 2 этого документа.

Данное руководство содержит материалы для углубленного изучения программирования и предназначено для тех, кто уже хорошо умеет программировать (на C, либо на другом языке программирования). Здесь содержится справочник по языку C, перекрестные ссылки по библиотеке исполняющей системы и информациЯ по программированию с использованием потоков C++, моделей памяти, плавающей точки, оверлеев, видео-функций, интерфейса с языком ассемблера, а также сообщения об ошибках исполняющей системы и компилятора.

Прочесть документ "Начало работы" следует, если:

1. Вы ранее никогда не программировали ни на одном языке.

2. Вы ранее программировали, но не на C, и желаете прочесть введение в язык C.

3. Вам нужна информация о том, как установить на компьютере Turbo C++.

В Руководстве пользователя находится информация об интегрированной среде Turbo (включая редактор), администраторе управляющей системы, компиляторе командной строки, дополняющих Turbo C++ утилитах и макроязыке редактора Turbo.

Справочник по библиотеке содержит в алфавитном порядке листинг функций и глобальных переменных Turbo C++.

Содержание данного руководства

Глава 1:"Стандарт языка Turbo C++" описывает язык Turbo C++. Здесь приводятся все отличия от стандарта ANSI C. Данная глава также включает справочник по языкам C и C++.

Глава 2: "Перекрестные ссылки по библиотеке управляющей системы" содержит информацию об исходных кодах библиотеки исполняющей системы. Здесь также описаны файлы заголовков и приводятся перекрестные ссылки по библиотеке управляющей системы, организованные по субъектам библиотеки. Например, если вы хотите выяснить, какие функции относятся к графике, вы должны обратиться к разделу данной главы "Графика".

Глава 3:"Потоки C++" рассказывает, как использовать библиотеку потоков C++.

Глава 4:"Модели памяти, операции с плавающей точкой и оверлеи" рассматривает модели памяти, программирование со смешанными моделями памяти, вычисления с плавающей точкой и оверлеями.

Глава 5:"Видео-функции" посвящена обработке в Turbo C++ текстов и графических изображений.

Глава 6:"Интерфейс с языком ассемблера" говорит о том, как нужно писать программы на языке ассемблера, чтобы они правильно работали при вызове из программ на Turbo C++.

Глава 7: "Сообщения об ошибках" перечисляет и объясняет все фатальные ошибки, ошибки и предупреждения исполняющей системы и компилятора, а также дает возможные рекомендации по их устранению.

Приложение А: "Стандарты ANSI, зависимые от реализации" описывает те аспекты стандарта ANSI C, которые были определены с некоторой степенью свободы или не были определены вообще в стандарте ANSI. Следовательно, эти аспекты могут варьироваться в зависимости от конкретной реализации. Данное приложение сообщает о том, как Turbo C++ поступает в отношении каждого из этих аспектов.

Глава 1 Стандарт языка Turbo C++

В данной главе дается подробное справочноеруководство программиста по языку Turbo C++. Оно не является руководством по изучению языка, а скорее формальным описанием языков C и C++ в их реализации программным продуктом Turbo C++. В данной главе описываются грамматические правила записи структуры фраз и лексики языка, а также дается подробное изложение имеющихся директив препроцессора. При формулировке синтаксиса используется модифицированная запись Бэкуса-Науэра,при необходимости сопровождаемая кратким описанием и примерами программ.

Turbo C++ реализует стандарт ANSI C, разработанный техническим комитетом X3J11 между июнем 1983 и декабрем 1988 гг., с некоторыми расширениями, оговариваемыми вданномтексте. Вы имеете возможность устанавливать опции компилятора, которые будут предупреждать вас о том, чтотакие расширения встретилисьпри работе компилятора. Вы можете также настроить компилятор таким образом, чтобы он рассматривал ключевые слова расширений Turbo C++ в качестве нормальных идентификаторов (см. Главу 4,"Компилятор командной строки", в Руководстве пользователя).

Существуют также "согласующие" расширения, включаемые посредством директив #pragma, предлагаемых стандартом ANSI C, предназначенные для работы с нестандартными, зависимыми от конкретной реализации средствами языка.

Turbo C++ является также полной реализацией AT&TC++ версии 2.00, объектно-ориентированного надмножества C, разработанного Бьерном Строструпом из AT&T Bell Laboratories. Помимо того,что C++ дополняет C многими новыми средствами и возможностями, он также и отличен от него в большей или меньшей степени. В настоящей главе содержатся замечания по этим отличиям. Все средства языка Turbo C++,имеющие отклонения от C++, более подробно рассматриваются, начиная со страницы 98.

Синтаксис и терминология

Синтаксические определения состоят из имени определяемого в настоящий момент и не определенного где-либо выше термина, за которым следует двоеточие (:). Альтернативы обычно следуют за этим в отдельных строках, но могут также помещаться и в одной строке; в таком случае им предшествует фраза "одно из". Например,

внешнее-определение:

определение-функции

объявление

восьмеричная цифра: одно из

0 1 2 3 4 5 6 7

Опциональные элементы конструкции заключаются в угловые скобки:

целочисленный-суффикс:

суффикс-целого-без-знака <суффикс-длинного-целого>

В данной главеслово "аргумент" везде используется для обозначения действительного значения, передаваемогопри вызове функции. "Параметр" обозначает переменную, определяемую в заголовке функции, которая будет содержать в себе передаваемое значение.

Грамматические правила структуры фраз и лексики языка

Грамматические правила лексикиязыка Turbo C++ описаны на стр. 5 - 58 оригинала; грамматические правила структуры фраз Turbo C++ описаны на стр. 58 - 98 оригинала.

Грамматические правила лексики языка рассматриваются с точки зрения существованияразличных категорий слово-ориентированных языковых единиц,называемых лексемами, распознаваемых компилятором. Грамматические правила структуры фраз подробно определяют допустимые способы группирования этих лексем в выражения, операторы и прочие смысловые единицы языка.

Лексемы Turbo C++ образуются из последовательности операций, выполняемых с вашейпрограммой компилятором и препроцессором языка.

Программа на Turbo C++ начинает свое существованиекак последовательность ACSII-символов,представляющих собой ее исходный код, создаваемый нажатиями клавиш при работе в подходящем текстовом редакторе (например, в собственном редакторе Turbo C++). Базовая программная единица в Turbo C++ представляет собой файл. Обычно такойфайл соответствует файлу DOS, находящемуся в оперативной памяти или на диске и имеющему созданное по правилам DOS имя и расширение .C или . CPP.

Сначала выполняется просмотр текста программы препроцессором, который ищет в нем специальные директивы препроцессора (см. стр. 133 оригинала). Например, директива #include <включаемый_файл> добавляет (или включает) впрограмму перед фазой компиляции содержимое файла <включаемый_файл>. Препроцессор также выполняет расширение любых встреченных в программах или файлах включения макросов.

Пробельные символы

На фазе компиляции, отвечающей за распознавание лексем, файл исходного кода программы подвергается лексическому анализу (т.е. разбиению налексемы и пробелы). Пробельными будут обобщенно именоваться собственно символы пробелов, горизонтальные и вертикальныесимволы табуляции, символы новой строки и комментарии. Пробельные символы служат для обозначения мест начала и конца лексем, и сверх этой функции, для исключения из компиляции всех избыточных символов, не входящих в состав лексем. Например, следующие две последовательности,

int i; float f;

и

int i ;

float f;

лексически идентичны, а их лексический анализ в обоих случаях дает шесть лексем:

int i ; float f ;

ASCII-символы, обычно рассматриваемые как пробельные, могут входить в строки литералов, и в данном случаебудут защищены от нормального процессаразбиения на лексемыи пробелы; другими словами, они станут представлять собой часть строки:

char name[] = "Borland International";

разбивается на семь лексем, включая и лексему строки литералов "Borland International".

"Склеивание" строк символом \

Имеется специальный случай, когда передпоследним символом новойстрокинаходится символ наклонной черты влево (\). В таком случае символы наклонной черты влево и символ новой строки отбрасываются, что позволяет рассматривать две физические строки текста как единое целое.

"Borland \

International"

будет рассматриваться как "Borland International" (дополнительную информацию см. на стр. 17 оригинала, "Строковые литералы"

Комментарии

Комментарии представляют собой текстовые части, предназначенные для аннотирования программы.Комментарии используются исключительно самим программистом; передлексическим анализом они исключаются из исходного текста программы.

Существует два способа указания на комментарии: традиционный метод C и метод C++. Они оба поддерживаются Turbo C+ +, и кроме того, имеется дополнительное, опциональное расширение, позволяющее организовывать вложенные комментарии. Разрешается смешанное и комбинированное использование комментариев любого типа в программах C и C++.

Комментарии C

Традиционный комментарий C представляет собой любую последовательность символов, помещаемую послепары символов/*. Признаком конца комментарияслужитперваяпара символов* /, встретившаяся после исходной пары /*. После выполнения макрорасширения вся эта последовательность целиком, включая четыре разделительных символа комментария,заменяется на один пробел. Отметим, чтонекоторые реализации C удаляют комментарии, не заменяя их на пробелы.

Turbo C++ не поддерживает не-мобильной стратегии вставки лексем с помощью /**/. Вставка лексем в Turbo C++ выполняетсяпри помощи заданной ANSI пары символов ##, следующим образом:

#define VAR(i,j) (i/**/j) /* не будет работать */ #define VAR(i,j) (i##j) /* в Turbo C++ будет работать */

#define VAR(i,j) (i ## j) /* также будет работать */

В Turbo C++

int /* объявление */ i /* как счетчика */;

после лексического анализа даст

int i ;

то есть три лексемы: Int I ;

Вложенные комментарии

ANSI C не разрешаетвложенность комментариев. Попытка комментировать приведенную выше строку в виде

/*int /* объявление */ i /как счетчика */; */

окончится неудачей, поскольку область действия первой пары /* будет ограничена первой парой */. Это даст в результате лексического анализа

i ; */

что приведет к генерированию состояния синтаксической ошибки.

По умолчанию Turbo C++ не позволяет вложенность комментариев, однако это умолчание может быть переопределено опцией компилятора. Разрешить вложенность комментариев можно либо при помощи опции -C (компилятора командной строки), либо через меню интегрированной среды программирования O\!C\!Source Options.

Комментарии C++

Для создания вкоде C комментариеввы можете также использовать символы //. Это средство специфично для Turbo C++.

C++ позволяетсоздание размещаемого в одной строке комментария при помощи двух подряд следующихсимволов наклонной черты(//). Такой комментарий может начинаться в любой позиции строки, и включает в себя все, что расположено до символа новой строки:

class X (* // это комментарий

... *);

Разделители комментариев и пробелы

В редких случаях пробелы перед /* и // или после */, хотя и не являются синтаксически обязательными, нопозволяют избежать проблем, связанных с мобильностью. Например, код C++

int i = j//* деление на k*/k;

+m;

при лексическом анализе дастint i = j +m; а не

int i = j/k;

+m;

как это можно было бы ожидать по традиционным соглашениям C. Более удобочитаемая форма

int i = j/ /* деление на k*/ k;

+m;

позволяет избежать этой проблемы.

Лексемы

Turbo C++ распознает лексемы шести классов: ключевые слова, идентификаторы, константы, строковые литералы, операции и знаки пунктуации (также называемые разделителями). Формальное описание лексемы имеет следующий вид:

лексема:

ключевое слово

идентификатор

константа

строковый литерал

операция

знак пунктуации

Во время лексического анализа исходного кода лексемы выделяются методом, при котором из строки символов обязательно выбирается лексема максимальной длины. Например, слово external будетрассматриваться как отдельный идентификатор, а некак ключевое слово extern, за которым следует идентификатор al.

Ключевые слова

Ключевыми словами называются слова, зарезервированныедля специальных целей, которые не должны использоваться в качестве обычных имен идентификаторов. В следующих двух таблицах приводятся ключевые слова Turbo C++. Вы можете использовать опции компилятора командной строки (или опции в IDE), чтобы выбрать только ключевые словаANSI, ключевые слова UNIX и т.д. Информацию об этих опциях см. в главах 1, "Справочник IDE", и 4, "Компилятор командной строки" в Руководстве пользователя.

Все ключевые слова Turbo C++ Таблица 1.1

asm _ds interrupt short

auto else _loadds signed

break enum long sizeof

case _es near _ss

catch _export new static

cdecl extern operator struct

char far pascal switch

class float private template

const for protected this

continue friend public typedef

_cs goto register union

default huge _regparam unsigned

delete if return virtual

do inline _saverages void

double int _seg volatile

while

Расширения Turbo C++ относительно ANSI C Таблица 1.2

cdecl _export _loadds _saveregs

_cs far near _seg

_ds huge pascal _ss

_es interrupt _regparam

Ключевые слова, специфичные для C++ Таблица 1.3

catch friend operator public

class inline private template

delete new protected this

virtual

Регистровые псевдопеременные Turbo C++ Таблица 1.4

_AH _BL

_AL _BP

_AX _BX

_BH _CH

_SP

_CL _DL

_CX _DX

_DH _FLAGS

_DI _SI

Идентификаторы

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

идентификатор:

не-цифра

идентификатор не-цифра

идентификатор цифра

не-цифра: одно из

a b c d e f g h i j k l m n o p q r s t u v w x y z _

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

цифра: одно из

0 1 2 3 4 5 6 7 8 9

Ограничения состава и длины идентификаторов

Идентификаторы представляют собой произвольные имена любой длины, присваиваемыеклассам, объектам, функциям,переменным, определяемым пользователем типам данных ит.д. Идентификаторы могут содержать буквы от A до Z и от a до z, символ подчеркивания (_) и цифры от 0 до 9. Существует только два ограничения:


Информация о работе «Turbo C++ Programer`s guide»
Раздел: Информатика, программирование
Количество знаков с пробелами: 668870
Количество таблиц: 13
Количество изображений: 0

Похожие работы

Скачать
14945
0
7

... к сожалению, обратное утверждение не верно. C++ Builder содержит инструменты, которые при помощи drag-and-drop действительно делают разработку визуальной, упрощает программирование благодаря встроенному WYSIWYG - редактору интерфейса и пр. Delphi — язык программирования, который используется в одноимённой среде разработки. Сначала язык назывался Object Pascal. Начиная со среды разработки Delphi ...

Скачать
225728
6
0

... ориентированы на 32 разрядные шинные архитектуры компьютеров с процессорами 80386, 80486 или Pentium. Фирма Novell также подготовила варианты сетевой ОС NetWare, предназначенные для работы под управлением многозадачных, многопользовательских операционных систем OS/2 и UNIX. Версию 3.12 ОС NetWare можно приобрести для 20, 100 или 250 пользователей, а версия 4.0 имеет возможность поддержки до 1000 ...

Скачать
49224
0
9

... завдання поширюється на розробку системи обліку зареєстрованих автомобілів в ДАІ, призначеної для збору, зберігання, а також полегшення для доступу та використання інформації. Програма з обліку зареєстрованих автомобілів в ДАІ, представляє собою, перехід від паперових носіїв інформації до електронних. Система обліку зареєстрованих автомобілів значно допоможе працівникам ДАІ з обліку, аналізу та ...

Скачать
132529
1
5

... меньше времени и ответ клиенту агентство может дать уже в день подачи заявки. Каждая турфирма разрабатывает индивидуальный образец листа бронирования. Согласно Федеральному Закону «Об основах туристской деятельности в Российской Федерации» (гл. IV, ст. 9) – это конкретный заказ туриста или лица, уполномоченного представлять группу туристов, туроператору на формирование туристского продукта. ...

0 комментариев


Наверх