Preprocessador
De cppreference.com
< cpp
O preprocessador é executado na fase de tradução 4, antes da compilação. O resultado do preprocessamento é um único arquivo que é passado para o compilador de fato.
Diretivas
As diretivas de preprocessamento controlam o comportamento do preprocessador. Cada diretiva ocupa uma linha e tem o seguinte formato:
- caractere
# - instrução de preprocessamento (um de
define,undef,include,if,ifdef,ifndef,else,elif,endif,line,error,pragma)[1] - argumentos (depende da instrução)
- quebra de linha
A diretiva nula (# seguido por uma quebra de linha) é permitida, mas não tem nenhum efeito.
|
As diretivas module e import também são diretivas de preprocessamento.
|
(desde C++20) |
Diretivas de preprocessamento não podem vir de uma expansão de macro.
#define VAZIO
VAZIO # include <file.h> // não é uma diretiva de preprocessamento
Capacidades
O preprocessador tem as capacidades de tradução de arquivo fonte:
- condicionalmente compilar partes do arquivo fonte (controlada pelas diretivas
#if,#ifdef,#ifndef,#else,#elife#endif) - substituir macros de texto e possivelmente concatenar ou citar identificadores (controlada pelas diretivas
#definee#undef, e operadores#e##) - incluir outros arquivos (controlada pela diretiva
#includee verificado com__has_include(desde C++17)) - causar um erro (controlada pela diretiva
#error)
Os seguintes aspectos do preprocessador podem ser controlados:
- comportamento definido pela implementação (controlado pela diretiva
#pragmae operador_Pragma(desde C++11)). Além disso, alguns compiladores suportam (a graus variantes) o operador__pragmacomo uma extensão não-padrão. - nome de arquivo e informação de linha disponíveis ao preprocessador (controlado pela diretiva
#line)
Notas de rodapé
- ↑ Estas são as direivas definidas pelo padrão. O padrão não define comportamento para outras diretivas: elas podem ser ignoradas, ter algum significado útil, ou causar um erro de tempo de compilação. Mesmo se do contrário ignoradas, elas são removidas do código fonte quando o preprocessador terminar. Uma extensão não-padrão comum é a diretiva
#warningque emie uma mensagem definida pelo usuário durante a compilação.
Veja também
Documentação C para preprocessador
|