Перейти до вмісту

C++/Основи/Директиви препроцесора

Матеріал з Вікіпідручника
< C++

Директиви препроцесора

[ред.]

C++. Директиви препроцесора починаються зі знаку «решітка» - «#», який має бути найпершим символом рядка. Програма яка обробляє ці директиви, називається препроцесором (в сучасних компіляторах препроцесор зазвичай є частиною самого компілятора). Файли заголовків включаються в текст програми за допомогою директиви #include. Директива #include включає в програму вміст вказаного файлу. Ім'я файлу може бути вказано двома способами:

#include "my_file.h"
#include <string>

Якщо файл вказати у дужках вигляду (<>), вважається що нам потрібен стандартний файл заголовка, і компілятор буде шукати його в визначених місцях (які зазвичай задаються по різному для різних платформ, але вказують на місце знаходження стандартних бібліотек). Подвійні лапки означають, що файл користувацький, і його пошук починається з каталогу, де знаходиться вихідний текст програми.

Файл заголовка також може містити директиви #include. Тому іноді, важко зрозуміти, які конкретно файли заголовка вже включені в даний код і деякі файли заголовків можуть виявитись включеними декілька разів. Повторне включення файлу призводить до помилки компіляції із-за повтору імен. Уникнути цього дозволяють умовні директиви компілятора. Приклад:

#ifndef BOOKSTORE_H
...
#endif

Умовна директива #ifndef дозволяє перевірити, чи не було значення BOOKSTORE_H визначено раніше. (BOOKSTORE_H – константа препроцесора; такі константи заведено писати великими буквами). Препроцесор дозволяє виконати наступні рядки коду програми до самого включення директиви #endif. У випадку коли умова не виконується і константа вже була визначена, він пропускає ці рядки, які знаходяться між #ifndef і #endif.

Директива

 #define BOOKSTORE_H

визначає константу препроцесора під назвою BOOKSTORE_H. Розмістивши цю директиву безпосередньо після директиви #ifndef, ми можемо гарантувати, що змістовна частина файлу заголовка буде включена в наш програмний код тільки один раз, скільки б разів не підключався сам файл заголовка.