Preprocessador
Da 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.
Índice |
[editar] 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
[editar] 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
,#elif
e#endif
) - substituir macros de texto e possivelmente concatenar ou citar identificadores (controlada pelas diretivas
#define
e#undef
, e operadores#
e##
) - incluir outros arquivos (controlada pela diretiva
#include
e 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
#pragma
e operador_Pragma
(desde C++11)). Além disso, alguns compiladores suportam (a graus variantes) o operador__pragma
como uma extensão não-padrão. - nome de arquivo e informação de linha disponíveis ao preprocessador (controlado pela diretiva
#line
)
[editar] 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
#warning
que emie uma mensagem definida pelo usuário durante a compilação.
[editar] Veja também
Documentação C para preprocessador
|