7. Pré-Processamento
Last updated
Last updated
Pré-processamento é uma parte da compilação do código antes de chegar ao arquivo final executável
A compilação de um código é dividida em 4 partes, pré -processamento, compilador, assembler e link loader, onde enfim é gerado o código executável.
O pré-processamento é a
primeira etapa da
compilação sendo dividida
em diretivas, sendo as
principais o #include
,#define
e #ifdef
" e
using
.
#include:
Inclui uma biblioteca ao programa.
Exemplos:
#include <lib.h>
Procura o arquivo primeiro na biblioteca padrão do compilador.
#include “lib.h”
Procura o arquivo primeiro na biblioteca local.
#define
Diretiva responsável pela definição de macros e constantes simbólicas que são usadas no código.
Exemplos:
#define SUM (A,B,C) (A+B+C)
#define max(a,b) (a<b ? b : a)
As macros do exemplo acima também poderiam ser escritas em linhas diferentes da seguinte forma:
#define max(a,b)
( a<b ?
b :
a )
Nestes casos, o final de cada linha deve ser finalizada com uma contrabarra ().
Em uma programação de microcontroladores existem uma série de pinos onde cada um serve o seu propósito, o comando #define pode determinar uma
variável como um comando usado para se referir ao pino, como o exemplo a
seguir que mostra um pino de saída de algum led de um circuito sendo definido
como a variável LED
.
Exemplo:
#define LED PORTAbits.RA3
Agora toda vez que escrevermos LED
estaremos nos referindo a esta saída.
#undef:
Desfaz a definição selecionada.
Exemplo:
#define LED PORTAbits.RA3 //Define um pino do microcontrolador
#undef LED // Desfaz a definição de LED
Em alguns momentos pode ser conveniente apagar um macro ou uma parte do código a fim de realizar testes e mensagens de depuração durante o desenvolvimento do programa e excluí-los da versão final do código.
Compilação condicional
#if elif #else #ifdef #ifndef #endif
As diretivas condicionais, descritas acima, geralmente são utilizadas para
verificar se algo está definido, importante para que algo não seja definido duas
vezes.
Portanto cada uma pode ser referenciada como uma lógica dentro de um if
comum
logo:
#if
usado como um if
comum
#elif:
Usado como um elseif
, só pode ser usado após o uso de um #if.
#else:
Usado como um else
comum, assim, também, só pode ser usado após o uso
de #if
.
#ifdef
Verifica se o seu parâmetro está definido, muito útil em códigos onde bibliotecas diferentes são alteradas e utilizadas com frequência, portanto, é muito usada para evitar erros definição.
#ifndef
De modo análogo a #ifdef, #ifndef verifica se não está definido, portanto, suas
utilidades são, geralmente, bem parecidas.
#endif
Usada para finalizar e marcar o escopo das diretivas condicionais.
Exemplo:
#if VL53L0X_OLD
//executa um código
#endif
Toda diretiva condicional deve ser sempre finalizada com o #endif
.
#using
Usado para referenciar os objetos de um arquivo, sendo assim, não precisamos referenciar o nome completo de uma função.
Exemplo:
using namespace std;
int main() {
cout << "Hello World" << endl;
return 0;
}
portanto, não precisamos escrever: std::cout
, Para o compilador cout já basta
*(Outras Aplicações podem ser usadas para a diretiva using, porém acredito
que não seja útil para a aplicação do Trincabotz).
#error:
Imprime para o usuário um erro, uma string indicando o erro, e finaliza prematuramente o processo de compilação.
#line
Raramente utilizada, a diretiva produz que o compilador trate as linhas
posteriores do programa como se o nome do arquivo-fonte fosse
<“nome_arquivo”>
e como se o número da linha de todas as linhas posteriores
começasse por constante. Se <“nome_arquivo”>
não for especificado, utiliza-se
o nome do arquivo especificado pela última diretiva #line
, ou o nome do
arquivo-fonte (se nenhum arquivo foi especificado previamente). É utilizada
para sinalizar o arquivo e a linha visualizada pelo programador quando é emitido algum erro.
Exemplo:
Partindo do pressuposto que o código exemplificado começa na linha 1:
Output:
Esse código está na linha 2, no arquivo Trincabotz.cpp
Esse código está na linha 10, no arquivo Trincabotz.cpp
Esse código está na linha 20, no arquivo Hello.cpp
Esse código está na linha 21, no arquivo Hello.cpp
#pragma
Com essa diretiva é possível utilizar outras diretivas que um determinado compilador C utiliza. Caso o compilador não reconheça a diretiva, ela será ignorada.
Exemplo:
Diretiva nula “#”
“#” é uma diretiva nula, o compilador irá ignorar a linha que possui tal diretiva