You are on page 1of 1

Шановні студенти, досвід прийняття 16 лаби показує, що саму лабу, досить нескладну,

формально ви робите, але ви зовсім не розумієте певні теоретичні основи, що стосуються


цього матеріалу.
Які етапи проходить ваша програма від тексту на мові програмування до виконуваного
файлу? Що саме робить препроцесор? Що таке бібліотека, а що таке заголовковий файл?
Більшість із вас не можуть взагалі відповісти на ці питання. Тому ознайомтеся, будь-
ласка, з цим коротеньким матеріалом.

Етапи компіляції програм на С/C++


1) Препроцесінг
Препроцесор — це макропроцесор, який перетворює вашу програму для подальшого
компілювання, тобто препроцесор обробляє вихідний код програми до того, як вона буде
скомпільована. На цій стадії відбувається робота з препроцесорними директивами
(починаються з #). Наприклад, директива препроцесора #include використовується для
включення до програмного коду заголовкових файлів, що мають шаблон імені *.h
(наприклад, stdio.h, мова С) або не мають розширення, наприклад, iostream (мова С++).
Таким чином, препроцесор замінює в коді програми рядок типу #include <filename> на
вміст відповідного заголовкового файлу. Також видаляються коментарі; макроси,
оголошені в директиві #define, замінюються їхніми значеннями. Макроси – це символьні
константи та операції, що позначаються символьними рядками. Вони забезпечують
встановлення значення замість імені, визначеного макросом, при зверненні до цього
імені у коді програми. Також спеціальні макроси використовуються при оголошенні
функцій зі змінною кількістю параметрів.

2) Компіляція
На цьому кроці виконується перетворення отриманого на минулому етапі коду на мові
програмування в об’єктний (бінарний, машинний) код. Отриманий на цьому етапі файл
має шаблон імені *.о, хоча ви не завжди можете побачити його в явному вигляді.

3) Компонування (linking) пов'язує всі ваші об'єктні файли та потрібні статичні


бібліотеки в єдиний виконуваний файл, який ми і можемо запустити в подальшому.
Виконуваний файл має розширення *.ехе у Windows та будь-яке розширення (або не
мати взагалі) в Unix.

Різниця між заголовковими файлами та бібліотеками


Ключова відмінність між файлом заголовка та файлом бібліотеки полягає в тому, що
файл заголовка містить лише оголошення (прототипи) функцій, які використовуються у
вашій програмі (тобто, файл заголовка – це код на мові програмування, який ви можете
візуально побачити, відкривши відповідний файл), в той час як файл бібліотеки містить
реалізацію відповідних функцій (тобто, це вже скомпільований об’єктний код, який
візуально не є читабельним). Ще слід розрізняти статичні та динамічні бібліотеки. В
першому випадку весь файл (об’єктний код) відповідної бібліотеки вбудовується
(компонується) у вашу програму. У другому випадку такого не відбувається, тому ваша
програма не буде працювати на іншому комп’ютері, якщо там буде відсутня необхідна
бібліотека. У Windows розширення файлів статичних бібліотек – lib, динамічних – dll, в
Unix –а та so відповідно.

You might also like