Tradicionalmente, a maneira padrão e portátil de evitar múltiplas inclusões de cabeçalho no C ++ era / é usar o #ifndef - #define - #endif
esquema de diretivas de pré-compilador, também chamado de esquema de guarda de macro (veja o trecho de código abaixo).
#ifndef MY_HEADER_HPP
#define MY_HEADER_HPP
...
#endif
Na maioria das implementações / compiladores (veja a figura abaixo), no entanto, há uma alternativa mais "elegante" que serve ao mesmo propósito que o esquema de proteção macro chamado #pragma once
. #pragma once
possui várias vantagens em comparação com o esquema de proteção macro, incluindo menos código, prevenção de conflitos de nomes e, às vezes, maior velocidade de compilação.
Pesquisando, percebi que, embora a #pragma once
diretiva seja suportada por quase todos os compiladores conhecidos, há uma turvação sobre se a #pragma once
diretiva faz parte do padrão C ++ 11 ou não.
Questões:
- Alguém poderia esclarecer se a
#pragma once
diretiva faz parte do padrão C ++ 11 ou não? - Se não faz parte do padrão C ++ 11, há planos de incluí-lo em versões posteriores (por exemplo, C ++ 14 ou posterior)?
- Também seria bom se alguém pudesse aprofundar as vantagens / desvantagens no uso de qualquer uma das técnicas (por exemplo, proteção macro versus
#pragma once
).
#pragma once
geralmente não.