Tradycyjnie, standardowym i przenośnym sposobem uniknięcia wielu włączeń nagłówków w C ++ było / jest użycie #ifndef - #define - #endif
schematu dyrektyw prekompilatora, zwanego również schematem ochrony makr (zobacz fragment kodu poniżej).
#ifndef MY_HEADER_HPP
#define MY_HEADER_HPP
...
#endif
Jednak w większości implementacji / kompilatorów (patrz rysunek poniżej) istnieje bardziej „elegancka” alternatywa, która służy temu samemu celowi, co schemat ochrony makro #pragma once
. #pragma once
ma kilka zalet w porównaniu ze schematem ochrony makr, w tym mniej kodu, unikanie kolizji nazw, a czasami poprawioną szybkość kompilacji.
Po przeprowadzeniu pewnych badań zdałem sobie sprawę, że chociaż #pragma once
dyrektywa jest obsługiwana przez prawie wszystkie znane kompilatory, istnieje niejasność dotycząca tego, czy #pragma once
dyrektywa jest częścią standardu C ++ 11, czy nie.
Pytania:
- Czy ktoś mógłby wyjaśnić, czy
#pragma once
dyrektywa jest częścią standardu C ++ 11, czy nie? - Jeśli nie jest częścią standardu C ++ 11, czy są jakieś plany włączenia go w późniejszych wersjach (np. C ++ 14 lub nowszych)?
- Byłoby również miło, gdyby ktoś mógł bardziej szczegółowo omówić zalety / wady stosowania którejkolwiek z technik (tj. Makroostrożność kontra
#pragma once
).
#pragma once
zwykle nie.