КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

Turbo C++ Version 1.0 Programmer’s Guide

Комментировать

LIB.com.ua [электронная библиотека]: : TURBO C++ Version 1.0 Programmer’s Guide

int p(int,long) /* Функция с типомвозврата int,принима-
ющая два параметра, первый типа int, и второй типа long */

int pascal q(void); /* функция типа pascal, возвращаю-
щая int и не принимающая параметров */

char far *s(char *source, int kind); /* Функция,
возвращающая дальний указатель на char и принимающая два па-
раметра: превый — дальний указатель на char, а второй int */

int printf(char *format,…); /* Функция, возвращающая
int и принимающая фиксированный параметр типа указатель на
char и любое число дополнительных параметров неизвестного
типа */

int (*fp)(int); /* Указатель на функцию, возвращающую
int и принимающую один параметр int */

Объявления

Общий синтаксис для определений внешних функций приво-
дится в следующей таблице:

Определения внешних функций Таблица 1.18
————————————————————
файл:
внешнее-определение
файл внешнее-определение

внешнее-определение:
определение-функции
объявление
asm-оператор

определение-функции:
декларатор
составной-оператор
————————————————————

В целом, определение функции состоит из следующих раз-
делов (грамматика позволяет создание и более сложных конс-
трукций):

— 61 —
1. Опциональные спецификаторы класса памяти: extern или
static. Умолчанием является extern.

2. Тип возврата, возможно void. Умолчанием является
int.

Элементы из пунктов 1 и 2 можно взаимно комбинировать.

3. Опциональные модификаторы: pascal, cdecl, interrupt,
near, far, huge. Умолчание зависит от модели памяти и уста-
новленных опций компилятора.

4. Имя функции.

5. Список объявления параметров, который может быть
пустым, заключенный в круглые скобки. В с предпочтительно
обозначать отсутствие параметров записью func(void). В С до-
пускается и старый стиль записи func(), но это может приво-
дить к неоднозначностям и возможным ошибкам. В С++ выдается
соответствующее предупреждение.

6. Тело функции, представляющее собой коды, выполняемые
при вызове функции.

Объявления формальных параметров

Список объявления формальных параметров имеет синтак-
сис, аналогичный синтаксису обычных объявлений идентификато-
ров. ниже приводится несколько примеров:

int func(void) (* // аргументы отсутствуют

С++int func(T! t1, T2 t2, T3 t3=1) (*
// три простых параметра,
// один из которых с аргументо
// по умолчанию

C++int func(T1* ptr1, T2& tref) (*
// аргументы указатель и ссылк

int func(register int i) (* // запрос регистра для аргумен

int func(char *str,…) (* /* один строковый аргумент ипе-
ременное число прочих аргументов, либо фиксирован-
ное число аргументов с переменными типами */

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

Многоточие (…) означает, что функция будет вызываться в
разных случаях с различными наборами аргументов. Многоточие
может следовать за подсписком объявлений известных аргумен-
тов. Такая форма прототипа уменьшает число выполняемых ком-
пилятором проверок.

Все объявленные параметры автоматически получают контекст, а
также длительность данной функции. Единственным допустимым
для них классом спецификатора является register.

В деклараторах формальных параметров могут использоваться
модификаторы const и volatile.

Вызовы функций и преобразования аргументов

— 62 —

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

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

1. Модификаторы языка для определения функции должны соот-
ветствовать модификаторам, используемым в объявлении функ-
ции, при всех вызовах функции.

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

Если ранее не был объявлен прототип функции, Turbo C++ пре-
образует интегральные аргументы при вызове функции в соот-
ветствии с правилами интегрального расширения, описанными в
разделе «Стандартные преобразования» на стр.41 оригинала.
При наличии в контексте прототипа функции Turbo C++ преобра-
зует данные аргументы к объявленным типам параметров, как
при операции присвоения.

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

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

Важное замечание

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

Структуры

Инициализация структуры описана на стр.42 оригинала.

Структура — это производный тип данных, обычно предс-
тавляющий собой определяемый пользователем набор именованных
компонентов. Эти компоненты могут быть любого типа, как фун-
даментального, так и производного (с некоторыми описываемыми

— 63 —
далее ограничениями), и располагаться в любой последователь-
ности. Кроме того, компонент структуры может иметь тип бито-
вого поля, более нигде не разрешаемого. Тип струтуры в Turbo
C++ позволяет обрабатывать сложные структуры данных так же
легко, как и простые переменные.

В С++ тип структуры рассматривается как тип класса (с
определенными различиями: доступ по умолчанию устанавливает-
ся public, а умолчание для базового класса также public).
Это позволяет организовывать более сложное управление компо-
нентами структуры при помощи спецификаторов доступа С++:
public (это умолчание), private и protected. Помимо данного
опционального механизма управления доступом и упомянутых ис-
ключений, далее рассматриваемые синтаксис и применение
структур относятся равно к структурам С и С++.

Объявление структур выполняется при помощи ключевого

Страницы: 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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *