Pragma once
Правильний заголовок цієї статті - #pragma once. Він показаний некоректно через технічні обмежень.
У мовах програмування Сі та C ++ #pragma once - нестандартна, але широко поширена препроцесорну директива. розроблена для контролю за тим, щоб конкретний вихідний файл при компіляції підключався строго один раз. Тобто, #pragma once застосовується для тих же цілей, що і include guard. але вимагає менше коду і не допускає можливості колізії імен. У наборі компіляторів GCC до версії 3.4 вважалася застарілою і для вживання не рекомендувалася. [1] Однак через широке застосування це рішення було змінено. [2]
У статті про include guard наводиться приклад ситуації, в якій потрібно використовувати той чи інший метод. Виходом є використання include guard, наведене там же; Варіантом використання #pragma once може бути:
- include "grandfather.h"
- include "father.h"
Переваги та недоліки [ред]
Застосування #pragma once замість include guard збільшить швидкість компіляції в багатьох випадках завдяки високорівневому механізму; компілятор може самостійно порівнювати імена файлів або inode 'и без необхідності виклику препроцесора Сі для перевірки заголовка на наявність #ifndef і #endif.
З іншого боку, деякі компілятори, як наприклад, GCC. також використовують спеціальний код для розпізнавання і оптимізації обробки include guard. [1]
Через те, що компілятор сам по собі відповідає за обробку #pragma once. програмісту немає необхідності створювати нові імена, наприклад, GRANDFATHER_H. Це виключає ризик колізії імен, тобто заголовки не зможе викликати помилку при його підключенні. Також доводиться менше набирати тексту, ніж при використанні include guard.
Можна використовувати обидві команди, #pragma once і include guards, для написання переноситься коду, що також може принести вигоду від застосування #pragma once при оптимізації (якщо компілятор її підтримує):
- pragma once
- ifndef GRANDFATHER_H
- define GRANDFATHER_H
Примітки [ред]
Додаткові джерела [ред]
Див. Також Pragma once (в ВікіОсвіта)