Одного разу виявилося, що найбільшим недоліком #pragma є те, що він не є офіційним стандартом. Однак я читав, що він все ще широко підтримується в усіх сучасних IDE. З іншого боку, #ifndef офіційно підтримується, але вимагає трохи більше зусиль (зрозуміло, не дуже) і не є реалізацією за замовчуванням у деяких IDE. 12 грудня 2018 р.
Ви можете використати #pragma один раз, коли звертаєтеся до конкретного компілятора, #pragma once є нестандартною та є специфічною для деяких компіляторів C, тоді як #ifndef/#define/#endif працює майже на кожному компіляторі C. #pragma раз зменшує ймовірність помилок.
У мовах програмування C і C++ #pragma один раз є нестандартна, але широко підтримувана директива препроцесора, призначена для включення поточного файлу заголовка лише один раз до однієї компіляції.
Директива #ifndef перевіряє, чи не визначено макрос. Якщо вказаний ідентифікатор не визначено як макрос, рядки коду, що йдуть безпосередньо після умови, передаються компілятору.
Включити охорону, або іноді їх називають захистами макросів, захистами заголовків або захистами файлів, є поширеною ідіомою C/C++, яка дозволяє безпечно включати файл заголовка кілька разів. Нестандартна директива препроцесора #pragma once є майже еквівалентною альтернативою цій ідіомі.
Одне з відомих застережень #pragma once пов’язане з символічними посиланнями. Це можна побачити в GCC і MSVC, хоча обидва вказують на підтримку директиви. Помилка виявлення цієї рівності може призвести до того, що файл буде включено кілька разів, що призведе до порушення ODR.