Partilhar via


once pragma

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.

Ver também

diretivas Pragma e as palavras-chave __pragma e _Pragma