Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+ООП_Навч_посібник.doc
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
6.58 Mб
Скачать

23.2.6. Директива #line

Директива #line змінює вміст псевдозмінн __LINE__ і __FILE__.

Директива #line використовують для зміни вмісту псевдозмінних __LINE__ і __FILE__, які є зарезервованими ідентифікаторами (макроіменами). Псевдозмінна __LINE__містить номер скомпільованого рядка, а псевдозмінна __FILE__ – ім'я компільованого файлу. Базова форма запису цієї команди має такий вигляд:

#line номер "ім'я_файлу"

У цьому записі номер – це будь-яке позитивне ціле число, а ім'я_файлу будь-який допустимий ідентифікатор файлу. Значення елемента номер стає номером поточного початкового рядка, а значення елемента ім'я_файлу ім'ям початкового файлу. Ім'я файлу – елемент необов'язковий. Директива #line використовується, в основному, з метою відлагодження і у спеціальних додатках.

Наприклад, наведений нижче код програми зобов'язує починати рахунок рядків з числа 200. Настанова cout відображає номер 202, оскільки це третій рядок у програмі після директивної настанови #line 200.

#include <iostream> // Для потокового введення-виведення

using namespace std; // Використання стандартного простору імен

#line 200 // Встановлюємо лічильник рядків, що дорівнює 200.

int main() // Цей рядок зараз має номер 200.

{ // Номер цього рядка дорівнює 201.

cout << __LINE__ _; // Тут виводиться номер 202.

getch(); return 0;

}

23.2.7. Директива #pragma

Директива #pragma залежить від конкретної реалізації компілятора.

Робота директиви #pragma залежить від конкретної реалізації компілятора. Вона дає змогу видавати компіляторові різні настанови, передбачені творцем компілятора. Загальний формат його використання такий.

#pragma ім'я

У цьому записі елемент ім'я представляє ім'я бажаної #pragma-настанови. Якщо вказане ім'я не розпізнається компілятором, директива #pragma просто ігнорується без повідомлення про помилку.

Необхідно пам'ятати! Для отримання докладної інформації про можливі варіанти використання директиви #pragma варто звернутися до системної документації з використовуваного Вами компіляторові. Ви можете знайти для себе дуже корисну інформацію. Звичайно #pragma-настанови дають змогу визначити, які застережливі повідомлення видає компілятор, як генерується програмний код і які бібліотеки компонуються з вашими програмами.

23.3. Оператори препроцесора "#" і "##"

У мові програмування C++ передбачена підтримка двох операторів препроцесора: "#" і "##". Ці оператори використовують спільно з директивою #define. Оператор "#" перетворить наступний за ним аргумент у рядок, поміщений у лапки. Розглянемо, наприклад, таку програму:

#include <iostream> // Для потокового введення-виведення

using namespace std; // Використання стандартного простору імен

#define mkstr(s) # s

int main()

{

cout << mkstr(Я у захопленні від C++);

getch(); return 0;

}

Препроцесор C++ перетворить рядок

cout << mkstr(I like C++);

у рядок

cout << " Я у захопленні від C++";

Оператор "##" використовують для конкатенації двох лексем. Розглянемо такий приклад:

#include <iostream> // Для потокового введення-виведення

using namespace std; // Використання стандартного простору імен

#define concat(а, b) а ## b

int main()

{

int xy = 10;

cout << concat(x, y);

getch(); return 0;

}

Препроцесор перетворить рядок

cout << concat(x, y);

у рядок

cout << xy;

Якщо ці оператори Вам здаються дивними, потрібно пам'ятати, що вони не є операторами "повсякденного попиту" і рідко використовуються у програмах. Їх основне призначення дати змогу препроцесору обробляти деякі спеціальні ситуації.