C Ferramentas Intermediário
Pré-processador
O pré-processador é a primeira etapa da compilação em C. Ele manipula o texto do código-fonte antes da compilação propriamente dita, executando diretivas que começam com #. As mais comuns são #define (definir macros e constantes), #include (incluir arquivos) e compilação condicional (#ifdef, #ifndef, #endif).
Macros com parâmetros funcionam como funções, mas são substituições textuais. Isso as torna muito rápidas (sem custo de chamada de função), porém exigem cuidado com parênteses para evitar resultados inesperados. Já as include guards evitam que um mesmo arquivo de cabeçalho seja incluído mais de uma vez, usando #ifndef/#define/#endif.
Entender o pré-processador é essencial para escrever código portável, organizado e eficiente. Com ele, você pode criar constantes simbólicas, ativar/desativar trechos de código para depuração e garantir que declarações não se repitam.
Pontos-chave
#definecria uma macro: uma substituição textual feita antes da compilação.- Macros com parâmetros devem usar parênteses ao redor dos argumentos e da expressão para evitar erros de precedência.
#ifdefe#ifndefpermitem compilar trechos condicionalmente, úteis para debug e portabilidade.- Include guards (
#ifndef ARQUIVO_H/#define ARQUIVO_H/#endif) previnem múltiplas inclusões do mesmo cabeçalho. - O pré-processador não entende tipos nem escopo; ele apenas substitui texto.
#include <stdio.h>
// Constante simbólica
#define PI 3.14159
// Macro com parâmetros (note os parênteses)
#define AREA_CIRCULO(r) (PI * (r) * (r))
// Macro para depuração condicional
#define DEBUG 1
int main(void) {
double raio = 2.0;
// Uso da macro com parâmetros
double area = AREA_CIRCULO(raio);
printf("Area do circulo: %.2f\n", area);
// Compilação condicional
#ifdef DEBUG
printf("Modo debug ativado. Raio = %.2f\n", raio);
#else
printf("Modo release.\n");
#endif
return 0;
}