Введення
Документ "Початок роботи" містить огляд всього комплекту документації до Turbo C + +. Інформація про те, як з найбільшою ефективністю використовувати Інструкції по Turbo C + +, міститься у введенні і главі 2 цього документа.
Даний посібник містить матеріали для поглибленого вивчення програмування і призначене для тих, хто вже добре вміє програмувати (на C, або іншою мовою програмування). Тут міститься довідник по мові C, перехресні посилання по бібліотеці виконуючою системи та інформацію з програмування з використанням потоків C + +, моделей пам'яті, плаваючої крапки, оверлеїв, відео-функцій, інтерфейсу з мовою асемблера, а також повідомлення про помилки виконуючою системи й компілятора. < br />
Прочитати документ "Початок роботи" слід, якщо:
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
Ідентифікатори
Формальне визначення ідентифікатора має такий вигляд:
ідентифікатор:
не-цифра
ідентифікатор не-цифра
ідентифікатор цифра
не-цифра: одне з
abcdefghijklmnopqrstu vwxyz _
ABCDEFGHIJKLMNOPQRSTU VWXYZ
цифра: одне з
0 1 2 3 4 5 6 7 8 9
Обмеження складу та довжини ідентифікаторів
Ідентифікатори представляють собою довільні імена будь-якої довжини, прісваіваемиеклассам, об'єктам, функціям, змінним, що визначаються користувачем типів даних ит.д. Ідентифікатори можуть містити літери від A до Z і від a до z, символ підкреслення (_) і цифри від 0 до 9. Існує тільки два обмеження:
1. Перший символ повинен бути літерою або символом підкреслення.
Відзначимо, що ідентифікатори в Turbo C + + значущі до будь-якої довжини.
2. За умовчанням Turbo C + + розпізнає тільки перші 32 символи в якості значимих. Число значущих символів може бути зменшена за допомогою меню або опцій командного рядка, а не може бути збільшена. Використовуйте опцію-In TCC, або опцію меню O! C! S! Identifier Length, де 1
послідовність-цифр Експоненціальна частина
дробова константа:
.
.
Експоненціальна-частина:
e-послідовність цифр
E-послідовність цифр
знак: одне з
+ -
послідовність-цифр:
цифра
послідовність-цифр цифра
суфікс-константи-с--плаваючою точкою: одне з
f l F L
цілочисельних-константа:
десяткова-константа
вісімкова-константа
шестнадцатірічное-константа
ной-константи>
десяткова-константа:
цифра-крім-нуля
десяткова-константа цифра
вісімкова-константа:
0
вісімкова-константа вісімкова-цифра
шестнадцатірічное-константа:
0 x шестнадцатірічное-цифра
0 X шестнадцатірічное-цифра
шестнадцатірічное-константа шестнадцатірічное-цифра
цифра-крім-нуля: одне з
1 2 3 4 5 6 7 8 9
вісімкова-цифра: одне з
0 1 2 3 4 5 6 7
шестнадцатірічное-цифра: одне з
0 1 2 3 4 5 6 7 8 9
a b c d e f
A B C D E F
суфікс-цілочисельний-константи:
суфікс-константи-без-знака
суфікс-довгою-константи
суфікс-константи-без-знака: одне з
u U
суфікс-довгою-константи: одне з
l L
перечіслімая-константа:
ідентифікатор
символьна-константа:
послідовність-символів-c
послідовність-символів-c:
символ-c
послідовність-символів-c символ-c
символ-c:
будь-який символ з початкового набору символів, за винятком символів одинарною лапки ( '), зворотної похилої риси () або керуючої послідовності-символу нового рядка.
керуюча-послідовність: одне з
* '?
a bf n
o ooooo r
t vXh ... xh ...
Цілочисельні константи
Цілочисельні константи можуть бути десятковими (основа системи числення 10), вісімкові (підстава 8) або шістнадцятковій (підстава 16). При відсутності перевизначаються суфіксів тіпданнихцелочісленной константи виводиться з її значення, як показано в таблиці 1.6. Відзначимо, що правила для десяткових?? х і не-десяткових констант різні.
Десяткові константи
Допустимими є десяткові константи величиною від 0 до 4,294,967,295. Константи, що виходять за вказані межі, викликають помилку. Десятічниеконстанти не можуть мати провідні нулі. Целочісленнаяконстанта з ведучим нулем рассматріваетсякак вісімкова. Таким чином,
int i = 10;/* десяткове 10 */
int i = 010;/* десяткове 8 */
int i = 0;/* десяткове 0 = вісімковим 0! */
Негативні константи-це просто константи без знака, до яких застосована унарний операція мінус.
Вісімкові константи
Всі константис ведучим нулем розглядаються як восьмерічние.Еслі вісімкова константа містить помилкові цифри 8 або 9, видається повідомлення про помилку. Помилка буде також видаватися при перевищенні вісімковій константою значення 037777777777.
Шістнадцяткові константи
Всі константи, що починаються з 0x (або 0X) розглядаються як шістнадцяткові. Шістнадцяткові константи, що перевищують 0xFFFFFFFF, призводять до помилки.
Суфікси довгих констант і констант без знака
Якщо законстантой слід суфікс L (або l), то така константа буде представлена як довга (типу long). Аналогічним чином, суфікс U (або u) робить константу константою без знаку (unsigned). Якщо чисельне значення константи перевищує десяткове 65,535, незалежно від використовуваного основаніясістеми числення, то така константа буде мати тип unsigned long. Суфікси можна вказувати для однієї і тієї ж константи в довільному порядку і набирати в будь-якому регістрі: ul, lu, UL і т.д.
Тип даних константи при відсутності будь-яких суфіксів взагалі (U, u, L або l) береться з наступної таблиці, первийже, який задовольняє вимогам величини цієї константи:
-------------------------------------------------- ---------< br />
десяткова int, long int, unsigned long int
вісімкова int, unsigned int, long int, unsigned long int
шестнадцатірічное int, unsigned int, long int, unsigned long int
-------------------------------------------------- ---------< br />
Якщо константа має суфікс U або u, то її тип даних буде першим з типів unsigned int, insigned long int, який задовольнить вимогам її величини.
Якщо константа має суфікс L або l, то її тип даних буде першим з типів long int, unsigned long int, який задовольнить вимогам її величини.
Якщо константа має обидва суфікса u і l (ul, lu, Ul, lU, uL, Lu, LU або UL), то вона буде мати тип даних unsigned long int.
У Таблиця 1.6 зведені подання цілочисельних констант для всіх трьох систем числення. Зазначені типи даних припускають відсутність перевизначаються суфіксів L або U.
Цілочисельні константи Turbo C + + без L або U Таблиця 1.6
Десяткові константи
0 до 32,767 int
32,768 до 2,147,483,647 long
2,147,483,648 до 4,294,967,295 unsigned long
> 4294967295 Генерується помилка
Вісімкові константи
00 до 077777 int
0100000 до 0177777 unsigned int
02000000 до 017777777777 long
020000000000 до 037777777777 unsigned long
> 037777777777 Генерується помилка
Шістнадцяткові константи
0x0000 до 0x7FFF int
0x8000 до 0xFFFF unsigned int
0x10000 до 0x7FFFFFFF long
0x80000000 до 0xFFFFFFFF unsigned long
> 0xFFFFFFFF Генерується помилка
Символьні константи
Символьна константа - етоодін або більше символів, укладених в одинарні лапки, наприклад 'F', '=', 'n'. У C константи ізодногосімвола імеюттіп Int і мають внутрішній представленіе16 біт, у той времякак старший байт слова заповнюється нулем або знаком. У C + + константа з одного символу має тип char. Многосімвольние константи як у C, так і в C + +, мають тип даних Int.
Керуючі послідовності
Для введення керуючих послідовностей, що дозволяють отримати візуальне уявлення деяких не мають графіческогоаналога символів, використовується символ зворотної похилої риси (). Наприклад, в якості одного символу нового рядка можна записати константу n.
Обратнаянаклонная риса іспользуетсяс вісімкові або шістнадцятковій числами для представлення ASCII-символами керуючого коду, соответствующемуетому значенням; наприклад, 'и. Лексема однієї і тієї ж операції може іметьнесколько інтерпретацій, залежно від контексту. Наприклад,
A * B Множення
* ptr Звернення за посиланням
A & B порозрядне І
& A Операція адресації
int & Модифікатор покажчика (C + +)
label: Мітка оператора
a? x: y Умовний оператор
void func (int n); Оголошення функції
a = (b + c) * d; Вираз з дужками
a, b, c; Вираз з комою
func (a, b, c); Виклик функції
a =-b; порозрядне віднімання (доповнення до
одиниці)
-func () (* delete a; *) Деструктор (C + +)
Унарні операції
& Операція адресації
* Операція звернення з посиланням
+ Унарний плюс
- Унарний мінус
тильда порозрядне доповнення (додаток до
одиниці)
! Логічне заперечення
+ + Префікс: перед-інкремент;
Постфікси: пост-інкремент
- Префікс: перед-декремент;
Постфікси: пост-декремент
Бінарні операції
Операції типу складання + Бінарний плюс (додавання)
- Бінарний мінус (віднімання)
Операції типу множення * Множення
/ Ділення
% Ділення
Операції зсуву
>> Зсув вправо
Порозрядним операції & порозрядне І
^ Порозрядне виключає АБО
! Порозрядне включає АБО
Логічні операції & & Логічне І
!! Логічне АБО
Оператори присвоювання = Присвоєння
*= Присвоїти твір
/ = Присвоїти приватне
% = Присвоїти залишок
+ = Присвоїти суму
-= Присвоїти різниця
> = Присвоїти зсув вправо
& = Присвоїти порозрядне І
^ = Присвоїти порозрядне виключає
АБО
! = Присвоїти порозрядне АБО
Операції відносини <Менше>
> Більше
> = Більше або дорівнює
Операції рівності == Так само
! = Не одно
Операції вибору. Прямий селектор компонента компонента -> Непрямий селектор компонента
Операції з компонентами:: Доступ/дозвіл контексту класу .* Звернення через покажчик
до компонента класу
-> * Звернення через покажчик
до компонента класу
Умовні операції a? x: y "Якщо a то x інакше y"
Операція комою, Обчислити, наприклад, a, b, c зліва - направо
Функції цих операцій, так само як і синтаксис, пріоритет і властивості асоціативності розглядаються, починаючи зі стор 73 оригіналу.
Пунктуатори
У TurboC + + пунктуатори, також звані роздільниками, визначаються наступним чином:
пунктуатор: одне з
[] () (* *),;: ... * = #
Квадратні дужки
[] (Що відкриває і закриває квадратні дужки) вказують на індекси одно-та багатовимірних масивів:
char ch, str [] = "Stan"
int mat [3] [4];/* матриця 3 x 4 */
ch = str [3];/* 4-й елемент */
...
Круглі дужки
() (Що відкриває і закриває круглиескобкі) групують вирази, виділяють умовні вирази і вказують на виклики функцій і параметри функцій:
d = c * (a + b);/* перевизначення нормального пріоритету */
/ * Виконання операцій */
if (d == z) + + x;/* важливо при використанні умовних операцій */
func ();/* виклик функції без аргументів */
int (* fptr) ();/* оголошення покажчика функції */
fptr = func;/* відсутність () означає покажчик функції */
void func2 (int n);/* оголошення функції з аргументами */
Рекомендуетсяіспо