Pragma once

Правильний заголовок цієї статті - #pragma once. Він показаний некоректно через технічні обмежень.

У мовах програмування Сі та C ++ #pragma once - нестандартна, але широко поширена препроцесорну директива. розроблена для контролю за тим, щоб конкретний вихідний файл при компіляції підключався строго один раз. Тобто, #pragma once застосовується для тих же цілей, що і include guard. але вимагає менше коду і не допускає можливості колізії імен. У наборі компіляторів GCC до версії 3.4 вважалася застарілою і для вживання не рекомендувалася. [1] Однак через широке застосування це рішення було змінено. [2]

У статті про include guard наводиться приклад ситуації, в якій потрібно використовувати той чи інший метод. Виходом є використання include guard, наведене там же; Варіантом використання #pragma once може бути:

  1. include "grandfather.h"
  2. 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 при оптимізації (якщо компілятор її підтримує):

  1. pragma once
  2. ifndef GRANDFATHER_H
  3. define GRANDFATHER_H

Примітки [ред]

Додаткові джерела [ред]

Див. Також Pragma once (в ВікіОсвіта)