Рисунок 12 – Обробка С + + програми
Після цих трьох етапів формується виконуваний код програми. Завдання препроцесора - перетворення тексту програми до її компіляції. Правила препроцесорну обробки визначає програміст за допомогою директив препроцесора. Директива починається з #.
# Define - вказує правила заміни в тексті.
# Include <ім'я заголовного файла> - директива призначена для включення в текст програми тексту з каталогу заголовків файлів, що поставляються разом зі стандартними бібліотеками. Кожна бібліотечна функція C має відповідний опис в одному з заголовних файлів. Список заголовних файлів визначений стандартом мови. Вживання директиви include не підключає відповідну стандартну бібліотеку, а лише дозволяють вставити в текст програми опису із зазначеного заголовного файлу. Якщо використовується заголовний файл із стандартної бібліотеки, то його ім'я укладають в кутові дужки. Якщо використовується заголовний файл, який знаходиться в поточному каталозі проекту (він може бути створений розробником програми), то його ім'я полягає в лапки. Підключення кодів бібліотеки здійснюється на етапі компоновки, тобто після компіляції. Хоча в заголовних файлах містяться всі описи стандартних функцій, в код програми включаються тільки ті функції, які використовуються в програмі.
|
|
Після виконання препроцесорну обробки в тексті програми не залишається жодної препроцесорну директиви.
Програма являє собою набір описів і визначень, і складається з набору функцій. Серед цих функцій завжди повинна бути функція з ім'ям main. Без неї програма не може бути виконана. Перед ім'ям функції заносяться відомості про тип повертається функцією значення (тип результату). Якщо функція нічого не повертає, то вказується тип void: void main (). Кожна функція, в тому числі і main, повинна мати список параметрів. Список може бути порожнім, тоді він вказується як (void) (слово void може бути опущено: ()). За заголовком функції розміщується тіло функції. Тіло функції - це послідовність визначень, описів і виконуваних операторів, укладених у фігурні дужки. Кожне визначення, опис або оператор закінчується крапкою з комою.
Визначення - вводять об'єкти (об'єкт - це іменована область пам'яті, окремий випадок об'єкта - змінна), необхідні для подання у програмі оброблюваних даних. Прикладами є
const int y = 10; / / іменована константа
float x; / / змінна
Описи - повідомляють компілятор про властивості та іменах об'єктів і функцій, описаних в інших частинах програми.
Оператори - визначають дії програми на кожному кроці її виконання.
2.2. Елементи мови C / C + +
1) Алфавіт мови який включає
|
|
• прописні і рядкові латинські літери та знак підкреслення;
• арабські цифри від 0 до 9;
• спеціальні знаки "{}, | [] () + - /% *. \ ':; &? <> =! # ^
• пробільні символи (пробіл, символ табуляції, символи переходу на новий рядок).
2) Із символів формуються лексеми мови:
• Ідентифікатори - імена об'єктів C / C + +-програм. У ідентифікаторі можуть бути використані латинські літери, цифри та знак підкреслення. Прописні і малі літери розрізняються, наприклад, PROG1, prog1 і Prog1 - три різних ідентифікатора. Першим символом повинна бути буква або знак підкреслення (але не цифра). Прогалини в ідентифікаторах не допускаються.
• Ключові (зарезервовані) слова - це слова, які мають спеціальне значення для компілятора. Їх не можна використовувати в якості ідентифікаторів.
• Знаки операцій - це один або декілька символів, що визначають дію над операндами. Операції поділяються на унарні, бінарних і тернарних за кількістю що беруть участь у цій операції операндів.
• Константи - це незмінні величини. Існують цілі, речові, символьні і рядкові константи. Компілятор виділяє константу в якості лексеми (елементарної конструкції) і відносить її до одного з типів за її зовнішнім виглядом.
• Роздільники - дужки, крапка, кома пробільні символи.
2.3. Константи в C / C + +
Константа - це лексема, що представляє зображення фіксованого числового, строкового чи символьного значення. Константи поділяються на 5 груп:
• цілі;
• речові (з плаваючою крапкою);
• перечислимого;
• символьні;
• рядкові.
Компілятор виділяє лексему і відносить її до тієї чи іншої групи, а потім всередині групи до певного типу по її формі запису в тексті програми і по числовому значенню.
Цілі константи можуть бути десятковими, вісімковій і шістнадцятковій.
Таблиця 7 – Цілі константи
Назва | Визначення | Приклади |
десяткова константа | Послідовність десяткових цифр, що починається не з 0, якщо це число не 0 | 8, 0, 192345 |
вісімкова константа | Послідовність вісімкових цифр, яким передує 0. | 026, 034, 017 |
шістнадцяткова константа | Послідовність шістнадцятирічних цифр, яким передують символи 0х або 0Х | 0хА, 0Х00F, 0х123 |
Таблиця 8 – Речові константи можуть мати дві форми уявлення: з фіксованою точкою і з плаваючою крапкою.
Назва | Вид | Приклади |
Константи з фіксованою точкою | [цифри]. [цифри] | 5.7,.0001, 41. |
Константа з плаваючою точкою | [цифри][.][цифри]E|e[+|-] [цифри] | 0.5е5,.11е-5, 5Е3 |
Перечислимого константи вводяться за допомогою ключового слова enum. Це звичайні цілі константи, яким приписані унікальні і зручні для використання позначення.
enum {one=1, two=2, three=3, four=4};
enum {zero,one,two,three};
enum {ten=10, three=3, four, five, six};
enum {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};
Символьні константи - це один або два символи, укладені в апострофи. Символьні константи, що складаються з одного символу, мають тип char і займають в пам'яті один байт, символьні константи, що складаються з двох символів, мають тип int і займають два байти. Послідовності, що починаються зі знака \, називаються керуючими, вони використовуються:
• для представлення символів, що не мають графічного відображення, наприклад:
\ a - звуковий сигнал,
\ b - повернення на один крок,
\ n - переклад рядка,
\ t - горизонтальна табуляція;
• для представлення символів: \, ',?, "(\ \, \ ', \?, \");
• для представлення символів за допомогою шістнадцятиричних або вісімкових кодів (\ 073, \ 0хF5);
Строкова константа - це послідовність символів, укладена в лапки. Всередині рядків також можуть використовуватися керуючі символи. наприклад:
"\ NНовая рядок",
"\ N \" Алгоритмічні мови програмування \ "".
2.3. Типы данных в C++
Типи C + + можна розділити на прості і складові. До простих типів відносять типи, які характеризуються одним значенням. У мові C + + визначено 6 простих типів даних:
|
|
int (цілий)
цілочисельні |
wchar_t (расширений символьний) (C++)
bool (логічний) (C++)
с плаваючей точкою |
double (речовинний з подвійною точністю)
Існує 4 специфікатора типу, уточнюючих внутрішнє представлення та діапазон стандартних типів
short (короткий)
long (довгий)
signed (знаковий)
unsigned (беззнакові)
Таблиця 9 – Типи даних в С
Тип даних | визначення | Розмір | Діапазон |
(signed) char | Значеннями є елементи кінцевого впорядкованої множини символів. Кожному символу ставиться у відповідність число, яке називається кодом символу. | 1 байт | -128..127 |
unsigned char | 0..255 | ||
wchar_t | Значеннями є елементи кінцевого впорядкованої множини символів в кодуванні Unicode | 2 байта | 0..65535 |
(signed) int | Значеннями є цілі числа. | 4 байта (для 32-разрядного МП) | –2147483648 … +2147483647. |
(signed) long (int) | |||
unsigned int | 0…+4294967 295. | ||
unsigned long (int) | |||
(signed) short int | 2 байта (для 32-разрядного МП) | –32768 … +32767 | |
unsigned short int | 0 … 65536; | ||
bool | Дані цього типу можуть приймати значення true і false. | 1 байт | false, true |
float | Значеннями є дійсні числа | 4 байта | 3.4Е-38..3.4Е+38 |
double | 8 байт | 1.7Е-308..1.7Е+308 | |
long double | 10 байт | 3.4Е-4932..1Е+4932 |
2.4. Змінні
Змінна в C + + - іменована область пам'яті, в якій зберігаються дані певного типу. У змінної є ім'я і значення. Ім'я служить для звернення до області пам'яті, в якій зберігається значення. Перед використанням будь-яка змінна повинна бути описана.
int a; float x;
2.5. Операції
У відповідності з кількістю операндів, які використовуються в операціях вони діляться на унарні (один операнд), бінарні (два операнди) і тернарних (три операнда).
Таблиця 10 – Операції мови С
Операція | опис |
унарні операції | |
++ | Збільшення на одиницю: префіксная операція - збільшує операнд до його використання, постфіксной операція збільшує операнд після його використання. |
-- | Зменшення на одиницю: префіксная операція - зменшує операнд до його використання, постфіксной операція зменшує операнд після його використання. |
sizeof | обчислення розміру (в байтах) для об'єкта того типу, який має операнд |
- | Унарний мінус |
+ | Унарний плюс |
! | Логічне заперечення (НЕ). В якості логічних значень використовується 0 (false) - брехня і не 0 (true) - істина, запереченням 0 буде 1, запереченням будь-якого ненульового числа буде 0. |
& | Отримання адреси операнда |
* | Отримання значення, що знаходиться за вказаною адресою (разименованія) |
new | виділення пам'яті |
delete | звільнення пам'яті |
(type) | перетворення типу |
Бінарні операції | |
мультиплікативні | |
* | множення операндів арифметичного типу |
/ | поділ операндів арифметичного типу (якщо операнди цілочисельні, то виконується цілочисельне ділення) |
% | отримання залишку від ділення цілочисельних операндів |
адитивні | |
+ | бінарний плюс (додавання арифметичних операндів) |
- | бінарний мінус (віднімання арифметичних операндів) |
операції порівняння | |
< | менше, ніж |
<= | менше або дорівнює |
> | більше |
>= | більше або дорівнює |
= | дорівнює |
!= | не дорівнює |
Логічні | |
&& | кон'юнкція (І) цілочисельних операндів або відношень, цілочисельний результат брехня (0) або істина (не 0) |
|| | диз'юнкція (АБО) цілочисельних операндів або відношень, цілочисельний результат брехня (0) або істина (не 0) |
Тернарна | |
?: | умовна операція в ній використовується три операнда. Вираз1? Вираженіе2: вираз3; Першим обчислюється значення вираженія1. Якщо воно істинне, то обчислюється значення вираженія2, яке стає результатом. Якщо при обчисленні вираженія1 вийде 0, то в якості результату береться значення вираженія3. наприклад: x <0? -x: x; / / обчислюється абсолютне значення x. |
присвоювання | |
= | привласнення |
*= | множення з присвоюванням (мультиплікативне присвоювання) |
/= | ділення з присвоюванням |
%= | ділення з залишком із присвоюванням |
+= | додавання з присвоюванням |
-= | віднімання з присвоюванням |
Таблиця11 - Приоритеты операций.
|
|
Ранг | Операції |
() [ ] ->. | |
! ~ - ++ -- & * (тип) sizeof тип() | |
* / % (мультиплікативні бінарні) | |
+ - (аддитивні бінарні) | |
< > <= >= (відношення) | |
==!= (відношення) | |
&& (кон'юнкція «І») | |
|| (диз'юнкція «АБО») | |
?: (умовна операція) | |
= *= /= %= -= &= ^= |= <<= >>= (операція присвоювання) | |
, (операція кома) |
2.6. Вирази
З констант, змінних, роздільників і знаків операцій можна конструювати вирази. Кожен вираз являє собою правило обчислення нового значення. Кожен вираз складається з одного або декількох операндів, символів операцій і обмежувачів. Якщо вираз формує ціле або дійсне число, то воно називається арифметичним. Пара арифметичних виразів, об'єднана операцією порівняння, називається відношенням. Якщо відношення має ненульове значення, то воно - істинне, інакше - хибне.