Traditionnellement, le moyen standard et portable d'éviter les inclusions d'en-têtes multiples en C ++ était / consiste à utiliser le #ifndef - #define - #endif
schéma de directives pré-compilateur également appelé schéma de macro-garde (voir l'extrait de code ci-dessous).
#ifndef MY_HEADER_HPP
#define MY_HEADER_HPP
...
#endif
Dans la plupart des implémentations / compilateurs (voir l'image ci-dessous) cependant, il existe une alternative plus "élégante" qui sert le même objectif que le schéma de macro-garde appelé #pragma once
. #pragma once
présente plusieurs avantages par rapport au schéma de macro-garde, notamment moins de code, éviter les conflits de noms et parfois une vitesse de compilation améliorée.
En faisant quelques recherches, je me suis rendu compte que, bien que la #pragma once
directive soit prise en charge par presque tous les compilateurs connus, il y a une incertitude quant à savoir si la #pragma once
directive fait partie du standard C ++ 11 ou non.
Des questions:
- Quelqu'un pourrait-il clarifier si la
#pragma once
directive fait partie du standard C ++ 11 ou non? - S'il ne fait pas partie de la norme C ++ 11, est-il prévu de l'inclure dans les versions ultérieures (par exemple, C ++ 14 ou version ultérieure)?
- Ce serait également bien si quelqu'un pouvait développer davantage les avantages / inconvénients de l'utilisation de l'une ou l'autre des techniques (c.-à-d. Macro-garde contre
#pragma once
).
#pragma once
généralement pas.