
- •1 Основні елементи мови с
- •1.1 Алфавіт мови програмування
- •1.2 Лексеми
- •1.3 Ключові слова
- •1.4 Ідентифікатори
- •1.5 Класифікація типів даних
- •1.6 Літерали
- •1.7 Оператори
- •1.8 Коментарі
- •1.9 Директиви препроцесора
- •1.10 Організація програми
- •2 Операції та вирази
- •2.1 Загальні відомості
- •2.2 Арифметичні операції
- •2.3 Операції приведення типів
- •2.4 Операції присвоєння
- •2.5 Операції інкремента і декремента
- •2.6 Операції порівняння
- •2.7 Операції зсуву
- •2.8 Порозрядні операції
- •2.9 Логічні операції
- •2.10 Операція sizeof
- •2.11 Операція послідовного обчислення
- •2.12 Операція умови (?:)
- •2.13 Адресні операції
- •3 Прості типи даних
- •3.1 Оголошення змінних
- •3.2 Час існування та область видимості змінних
- •3.3 Цілі типи даних
- •3.4 Дійсні типи даних
- •4 Оператори керування
- •4.1 Оператор розгалуження if
- •4.2 Оператор розгалуження if-else
- •4.3 Оператор множинного розгалуження switch
- •4.4 Оператор циклу for
- •4.5 Оператор циклу while
- •4.6 Оператор циклу do while
- •4.7 Оператор break
- •4.8 Оператор continue
- •5 Функції
- •5.1 Основні поняття
- •5.2 Види виклику функцій
- •5.3 Область видимості
- •5.4 Порожній тип void
- •5.5 Передача аргументів у функцію
- •5.6 Рекурсивні функції
- •5.7 Прототипи функцій
- •6 Покажчики
- •6.1 Визначення та ініціалізація покажчиків
- •6.2 Визначення покажчиків
- •6.3 Масиви
- •6.4 Операції порівняння
- •6.5 Копіювання рядка
- •6.6 Покажчики на функцію
- •6.7 Покажчики на void
- •6.8 Арифметика покажчиків
- •7 Масиви
- •7.1 Загальні поняття
- •7.2 Одновимірні масиви
- •7.3 Багатовимірні масиви
- •8 Рядки в с
- •8.1 Рядки
- •8.2.Створення рядків
- •8.3 Прототипи
- •8.3 Функції перетворення буферів
- •8.4 Функції перевірки літер
- •8.5 Операції з рядками
- •9 Структури, об’єднання, перерахування
- •9.1 Структури
- •9.2 Бітові поля
- •9.3 Ключове слово typedef
- •9.4 Об’єднання
- •9.5 Перераховуваний тип
- •10 Введення та виведення даних
- •10.1 Функція виведення printf
- •10.2Функція введення scanf
- •10.3 Введення та виведення у файл
- •11 Динамічне виділення пам'яті
1.9 Директиви препроцесора
При запуску компіляції програми на С, починає діяти спеціальна програма – препроцесор.
Препроцесор – це попередній обробник тексту програми на С, який знаходить директиви препроцесора та виконує їх. Кожна директива препроцесора починається з символу #. Тільки після виконання препроцесором всіх своїх директив, починається трансляція тексту з мови С на мову машинних команд.
Найбільш частіше використовуються такі директиви препроцесора:
#include (включає файл у текст програми);
#define (замінює ідентифікатор на літерал).
Директива #include має два формати:
#include "ім'я_файлу";
#include <ім'я_файлу>.
Якщо ім'я файла вказане в лапках, то його пошук здійснюється в поточному каталозі користувача. Якщо ім'я файла задане в кутових дужках, то його пошук проводиться в стандартних директоріях операційної системи, наприклад, для компілятора DevC++ це «C:\Dev-C++\Include\».
Приклад 1.8. Синтаксис бібліотек.
# include <stdio.h> /* підключення стандартної бібліотеки
введення-виведення stdio.h */
# include <stdlib.h> /* підключення стандартної бібліотеки
stdlib.h */
# include «myfync.h» /* підключення файлу користувача
myfync.h */
Формат директиви # define:
# define стрічка_1 стрічка_2
де стрічка_1 – ідентифікатор, стрічка_2 – літерал.
Директива #define замінить всі появи ідентифікатора «стрічка_1» у вихідному файлі на літерал «стрічка_2». Заміна ідентифікатора буде здійснена тільки тоді, коли він формує лексему. Наприклад, ідентифікатор «стрічка_1» не буде замінений, якщо він присутній у стрічковому літералі чи є частиною довшого ідентифікатора.
Приклад 1.9. Запис директиви #define.
# define SIZE 12 /* у тексті програми всі лексеми SIZE
будуть замінені на цілий літерал 12.*/
Варто відмітити що при використанні # define немає необхідності у використанні оператора «;».
Файли заголовків мають розширення ".h", а файли коду – розширення ".с" або ".срр".
Файли коду містять реалізацію програми користувача і мають розширення ".с" або ".срр". Вони складаються з однієї або більше функцій. Одна з функцій, з яких починається виконання програми, повинна мати ім'я main. Функція main відрізняється від інших функцій тим, що її не можна викликати зсередини програми, а її параметри задаються операційною системою. Параметри у функції main можуть бути відсутні.
Виклик функції (активізація) виконується двома способами: класичним – за іменем; побічно – через покажчик на функцію (див. тему "Покажчики"). Класичний спосіб виклику функції проводиться за допомогою вказівки імені в дужках, за яким указується список параметрів (аргументів). Список параметрів являє собою значення (змінних, констант, покажчиків констант або адрес), які необхідно передати функції для успішного розв'язання задачі. Функція активізується завжди, коли в керуючій програмі зустрічається ім'я функції.
Після виконання відповідної функції управління передається назад у середовище програми (за винятком особливих ситуацій), яка продовжує свою роботу.