- •1.1 Перші кроки
- •1.2 Змінні й арифметичні вирази
- •1.3 Твердження for
- •1.4 Символічні константи
- •1.5 Ввід і вивід знаків
- •1.5.1 Копіювання файла
- •1.5.2 Відлік символів
- •1.5.3 Відлік рядків
- •1.6 Масиви
- •1.7 Функції
- •1.8 Аргументи - виклик за значенням
- •1.9 Символьні масиви
- •1.10 Зовнішні змінні й область дії
- •2.1 Назви змінних
- •2.2 Типи даних і розміри
- •2.3 Константи
- •2.4 Оголошення
- •2.5 Арифметичні операції
- •2.6 Реляційні та логічні оператори
- •2.7 Перетворення типів
- •2.8 Оператори приросту та спаду
- •2.9 Розрядні оператори
- •2.10 Оператори та вирази присвоєння
- •2.11 Вирази умов
- •2.12 Пріоритет і послідовність обчислення
- •3.1 Вирази та блоки
- •3.3 Else if
- •3.4 Switch
- •3.5 Цикли while та for
- •3.6 Цикли do-while
- •3.7 Break і continue
- •3.8 Goto та мітки
- •4.1 Основні знання про функції
- •4.2 Функції, які не повертають цілих
- •4.3 Зовнішні змінні
- •4.4 Правила області дії
- •4.5 Файли заголовка
- •4.6 Статичні змінні
- •4.7 Регістрові змінні
- •4.8 Структура блоків
- •4.10 Рекурсія
- •4.11 Препроцесор c
- •4.11.1 Включення файлів
- •4.11.2 Заміна макросів
- •4.11.3 Обумовлене включення файлів
- •5.1 Покажчики й адреси
- •5.2 Покажчики й аргументи функцій
- •5.3 Покажчики та масиви
- •5.4 Арифметика адрес
- •5.5 Покажчики на символи та функції
- •5.6 Масив покажчиків; покажчики на покажчики
- •5.7 Багатовимірні масиви
- •5.8 Ініціалізація масиву покажчиків
- •5.9 Покажчики в порівнянні з багатовимірними масивами
- •5.10 Аргументи командного рядка
- •5.11 Покажчики на функції
- •5.12 Складні оголошення
- •6.1 Основні поняття про структури
- •6.2 Структури та функції
- •6.3 Масиви структур
- •6.4 Покажчики на структури
- •6.5 Структури зі зворотнім звертанням
- •6.6 Пошук по таблиці
- •6.7 Typedef
- •6.8 Сполуки
- •6.9 Розрядні поля
- •7.1 Стандартний ввід і вивід
- •7.2 Форматований вивід - printf
- •7.3 Списки аргументів довільної довжини
- •7.4 Форматований ввід - scanf
- •7.5 Доступ до файлів
- •7.6 Обробка помилок - stderr і exit
- •7.7 Ввід і вивід рядків
- •7.8 Додаткові функції
- •7.8.1 Операції з ланцюжками
- •7.8.2 Перевірка і перетворення класів символів
- •7.8.3 Ungetc
- •7.8.4 Виконання команд
- •7.8.5 Керування пам'яттю
- •7.8.6 Математичні функції
- •7.8.7 Генератор випадкових чисел
- •8.1 Дескриптори файлів
- •8.2 Низькорівневий ввід/вивід - read і write
- •8.3 Open, creat, close, unlink
- •8.4 Довільний доступ - lseek
- •8.5 Приклад: втілення fopen і getc
- •8.6 Приклад - перелік вмісту каталогів
- •8.7 Приклад - розподільник пам'яті
2.1 Назви змінних
Хоч ми не згадали про це в Розділі 1, існують певні обмеження щодо назв змінних та символічних констант. Назви повинні складатися з літер і цифр, першим знаком має бути літера. Жорсткий пробіл «_» теж вважається літерою, він часом корисний для покращення прочитності довгих назв змінних. Однак, не починайте назв змінних з жорсткого пробілу, так як функції бібліотеки часто вживають такі назви для власних потреб. Літери верхнього регістру та літери нижнього регістру різняться, тож x та X — це дві різні назви. Традиційною практикою в C є використання літер нижнього регістру для назв змінних і тільки верхнього для символічних констант.
Щонайменше, 31 знак внутрішнього імені є значущим. Для назв функцій і зовнішніх змінних число може виявитися меншим за 31, оскільки зовнішні назви можуть використовуватись асемблерами та завантажувачами зв'язків, над якими мова не має жодного впливу. Для зовнішніх імен, стандарт гарантує унікальність тільки для 6-ох знаків одного регістру. Ключові слова, такі як if, else, int, float тощо, резервовано — ви не можете використати їх для назв змінних. Ключові слова мають бути нижнього регістру.
Розумним буде обирати такі назви змінних, які би відображали зміст змінної і які неможливо би було типографічно сплутати з іншими. Ми схильні вживати короткі назви для локальних змінних, особливо лічильників циклу, і довші — для зовнішніх змінних.
2.2 Типи даних і розміри
Існує лише кілька основних типів даних у C:
char |
один байт, здатний утримувати один знак локального набору символів |
int |
ціле, типово відображає натуральний розмір цілих машини |
float |
одинарної точності число з рухомою точкою |
double |
подвійної точності число з рухомою точкою |
На додачу, існує певна кількість класифікаторів, які можна використати стосовно вищевказаних основних типів. Так, short із long застосовуються з цілими:
short int sh;
long int counter;
Слово int можна опустити в таких оголошеннях і, типово, саме так і роблять.
Ідея полягає в тому, що short та long мають забезпечувати різними довжинами цілих, там де це має практичний сенс; int, як правило, буде натуральним розміром цілого для певної машини.short часто має 16-бітну довжину, а int — 16, або 32-бітну. Кожний компілятор може вибрати відповідні розміри для власного устаткування, єдиним обмеженням будучи те, що short та intповинні мати щонайменше 16 біт, long — 32 біти, short не може бути довшим за int, який, в свою чергу — не довшим за long.
Класифікатори signed або unsigned можна застосовувати щодо char або будь-якого цілого. Беззнакові, unsigned, числа завжди додатні або нуль і підлягають правилам арифметичного модуля 2n, де n — це кількість бітів використованого типу. Тож, наприклад, якщо char має довжину 8 бітів, змінні типу unsigned char матимуть значення між 0 та 255, тоді як signed char — між -128 та 127 (в машині з двійковою системою). Чи звичайні char вживаються зі знаком, чи є беззнаковими, залежить від машини, але друковні знаки завжди додатні.
Тип long double вказує на число з рухомою точкою підвищеної точності. Так само, як і у випадку з цілими, розміри об'єктів з рухомою точкою залежать від реалізації; float, double іlong double можуть представляти один, два або три відмінних розміри.
Стандартні файли заголовка <limits.h> і <float.h> містять символічні константи для всіх трьох розмірів, разом із іншими властивостями машини та компілятору. Це все розглянуто уДодатку Б.
Вправа 2-1. Напишіть програму для визначення амплітуд змінних char, short, int і long, як зі знаком, singned, так і беззнакових, unsigned, шляхом виводу відповідних значень з файлів заголовка і шляхом безпосереднього обчислення. Важче, якщо ви обчислите їх. Визначте діапазон різноманітних типів з рухомою точкою.
