Tradicionalmente, la forma estándar y portátil de evitar múltiples inclusiones de encabezado en C ++ era / es usar el #ifndef - #define - #endif
esquema de directivas precompilador también llamado esquema de macro-guardia (vea el fragmento de código a continuación).
#ifndef MY_HEADER_HPP
#define MY_HEADER_HPP
...
#endif
Sin embargo, en la mayoría de las implementaciones / compiladores (vea la imagen a continuación), hay una alternativa más "elegante" que sirve para el mismo propósito que el esquema de macro-guardia llamado #pragma once
. #pragma once
tiene varias ventajas en comparación con el esquema de macro-guardia, que incluye menos código, evitar conflictos de nombres y, a veces, una velocidad de compilación mejorada.
Investigando un poco, me di cuenta de que aunque la #pragma once
directiva es compatible con casi todos los compiladores conocidos, existe una turbidez sobre si la #pragma once
directiva es parte del estándar C ++ 11 o no.
Preguntas:
- ¿Podría alguien aclarar si la
#pragma once
directiva es parte del estándar C ++ 11 o no? - Si no es parte del estándar C ++ 11, ¿hay planes para incluirlo en versiones posteriores (por ejemplo, C ++ 14 o posterior)?
- También sería bueno si alguien pudiera profundizar en las ventajas / desventajas en el uso de cualquiera de las técnicas (es decir, macro-guardia versus
#pragma once
).
#pragma once
generalmente no.