Традиційно стандартним та портативним способом уникнути декількох включень заголовків у C ++ було / є використання #ifndef - #define - #endifсхеми директив попереднього компілятора, яка також називається макрозахисною схемою (див. Фрагмент коду нижче).
#ifndef MY_HEADER_HPP
#define MY_HEADER_HPP
...
#endif
У більшості реалізацій / компіляторів (див. Малюнок нижче), однак, є більш "елегантна" альтернатива, яка виконує ті ж цілі, що і названа схема макрозахисту #pragma once. #pragma onceУ порівнянні зі схемою макрозахисту є кілька переваг, включаючи менше коду, уникнення сутичок імен та іноді покращену швидкість компіляції.

Провівши деякі дослідження, я зрозумів, що хоча #pragma onceдиректива підтримується майже всіма відомими компіляторами, існує помутніння того, чи #pragma onceє директива частиною стандарту C ++ 11 чи ні.
Запитання:
- Чи може хтось уточнити, чи
#pragma onceє директива частиною стандарту C ++ 11 чи ні? - Якщо він не є частиною стандарту C ++ 11, чи є якісь плани щодо його включення до пізніших версій (наприклад, C ++ 14 або новіших версій)?
- Було б також непогано, якби хтось міг детальніше ознайомитись з перевагами / недоліками у використанні будь-якої з методик (тобто, макро-захист проти
#pragma once).
#pragma onceзазвичай ні.