Традиційно стандартним та портативним способом уникнути декількох включень заголовків у 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
зазвичай ні.