Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Especifica que o compilador inclui o arquivo de cabeçalho apenas uma vez, ao compilar um arquivo de código-fonte.
Sintaxe
#pragma once
Comentários
O uso de #pragma once pode reduzir os tempos de compilação, pois o compilador não abrirá e lerá o arquivo novamente após a primeira #include do arquivo na unidade de tradução. É o chamado de otimização de múltiplas inclusões. Ele tem um efeito semelhante ao incluem guard idiom, que usa definições de macro de pré-processador para evitar várias inclusões do conteúdo do arquivo. Também ajuda a evitar violações do uma regra de definição: o requisito de que todos os modelos, tipos, funções e objetos não tenham mais de uma definição em seu código.
Por exemplo:
// header.h
#pragma once
// Code placed here is included only once per translation unit
Recomendamos a diretiva #pragma once para o novo código porque ela não polui o namespace global com um símbolo de pré-processador. Requer menos digitação, distrai menos e não pode causar colisões de símbolos . As colisões de símbolos são erros causados quando diferentes arquivos de cabeçalho usam o mesmo símbolo do pré-processador que o valor de proteção. Ele não faz parte do padrão C++, mas é implementado de forma portátil por vários compiladores comuns.
Não há vantagem em usar tanto a linguagem de proteção de inclusão quanto a #pragma once no mesmo arquivo. O compilador reconhece a linguagem de proteção de inclusão e implementa a otimização de inclusão múltipla da mesma forma que a diretiva #pragma once se nenhum código de não-comentário ou diretiva de pré-processador vier antes ou depois da forma padrão da linguagem:
// header.h
// Demonstration of the #include guard idiom.
// Note that the defined symbol can be arbitrary.
#ifndef HEADER_H_ // equivalently, #if !defined HEADER_H_
#define HEADER_H_
// Code placed here is included only once per translation unit
#endif // HEADER_H_
Recomendamos a linguagem de proteção de inclusão quando o código deve ser portátil para compiladores que não implementam a diretiva #pragma once, para manter a consistência com o código existente ou quando a otimização de inclusão múltipla é impossível. Pode ocorrer em projetos complexos quando o aliasing do sistema de arquivos ou os caminhos de inclusão com aliased impedem o compilador de identificar arquivos de inclusão idênticos por caminho canônico.
Tenha cuidado para não usar #pragma once ou a linguagem de proteção de inclusão em arquivos de cabeçalho projetados para serem incluídos várias vezes, que usam símbolos de pré-processador para controlar seus efeitos. Para obter um exemplo desse design, consulte o <assert.h> arquivo de cabeçalho. Tenha também cuidado ao gerenciar seus caminhos de inclusão para evitar a criação de vários caminhos para arquivos incluídos, o que pode derrotar a otimização de inclusão múltipla para protetores de inclusão e #pragma once.