Introdução às diretivas de pré-processador em C

Na maioria das vezes, é feito um equívoco de que pré-processadores ou macros fazem parte da compilação do programa, mas isso é totalmente errado. As diretivas de pré-processador são o tipo de macros e uma fase antes da compilação. Pode-se dizer que este é um conjunto de instruções fornecidas ao compilador para realizar a compilação real. Eles também são conhecidos como abreviações de construção mais longas para macros, o que significa que o valor nas macros é substituído pelo segmento de códigos. A macro é definida por um símbolo especial e tem um símbolo começando com "#". Portanto, esses # define são um tipo de pré-processador especial seguido pelo compilador real. Neste tópico, vamos aprender sobre as diretivas de pré-processador em C.

O pré-processador possui um tipo especial de representação para sua identificação, como qualquer diretiva de pré-processador se inicia por um símbolo especial de "#" seguido de um identificador e, em seguida, o nome da diretiva. O espaço em branco também é permitido antes e depois do #. Por exemplo, # include.

Existem certos ajustes ou instalações que um pré-processador C pode fornecer:

  • Arquivos de cabeçalho: a inclusão de arquivos de cabeçalho é uma maneira pela qual as declarações podem ser substituídas pela sintaxe e pelo corpo do programa.
  • Expandir macro: definir macros é como abreviar um pedaço de código no qual um pré-processador C substitui as macros pela respectiva definição.
  • Compilação por condições: de acordo com vários cenários ou condições, a inclusão de certas partes do programa é possível pela compilação condicional.
  • Controle de linha: se você usar um programa para combinar ou reorganizar alguém ou mais arquivos de origem em um arquivo intermediário para compilação, poderá usar o controle de linha para informar ao compilador a origem de cada linha de origem.

Tipos de diretivas de pré-processador

Todos os tipos de diretivas de pré-processador são os seguintes:

  1. # definir
  2. # incluir
  3. # ifdef
  4. # undef
  5. #ifndef
  6. # E se
  7. #outro
  8. #elif
  9. #fim se
  10. #erro
  11. #pragma

1. #define (macros)

Uma macro é um trecho de código que é substituído por algum valor do código da macro. Qualquer macro é principalmente descrita e definida por sua diretiva #define.

Sintaxe:

#define token value

Existem dois tipos de macros:

  • Função - como macros
  • Macros semelhantes a objetos
Função - como macros

A função like-macro funciona quase como uma chamada de função.

Por exemplo:

#define MAX(a, b) ((a)>(b) ? (a): (b))

MAX aqui é o nome da macro.

Exemplo:

Resultado:

Macros semelhantes a objetos

Macros semelhantes a objetos são o tipo de identificador substituído por valor. É usado principalmente para representar constantes numéricas.

#define PI 3.1415

Aqui, o valor do PI será substituído pela macro.


Resultado:

2. #include

Há alguma outra funcionalidade para a diretiva de pré-processador de inclusão. Ele possui suas próprias três variantes, que substituem o código pelo código atual dos arquivos de origem.

Três variantes são as seguintes:

  • #incluir
  • #include ”file”
  • Incluir qualquer outra coisa

#incluir

Procura um arquivo na lista definida do sistema ou diretórios conforme especificado e procura uma lista padrão de bibliotecas do sistema.

#include ”file”

Esse tipo é usado para seus próprios arquivos de cabeçalho personalizados do programa. É feita uma pesquisa para um arquivo chamado file primeiro no diretório atual, seguido pelos arquivos de cabeçalho do sistema e pelos diretórios atuais do arquivo atual do diretório.

#include qualquer coisa

Esse tipo de diretiva de pré-processador de inclusão é usado quando nenhum dos outros dois tipos restantes de diretiva e seus argumentos não se encaixam e satisfazem a estrutura de computação.

3. #Ifdef

Verifica se a macro é definida por # define ou não. Se sim, ele executará o código, caso contrário, não o fará.

Sintaxe:

#ifdef MACRO
(
Code body
)
#endif
#undef:

Cancelar a definição de uma macro significa que ela é indefinida e precedida da diretiva #undef.

Sintaxe:

#undef token

Resultado:

4. Ifndef

Este processador verifica se #define é definido ou não por #define. Se sim, ele executa o código.

Sintaxe:

#Ifndef MACRO
//code
#endif
#If

Esse processador funciona apenas como um loop if, avalia a expressão ou condição. Se o id da condição for verdadeiro, ele executará o código caso contrário não.

Sintaxe:

#if expression
//code
#endif
#else

A diretiva #else pré-processador é usada para avaliar a expressão ou condição se a condição de #if for falsa. Pode ser usado com as diretivas #if, #elif, #ifdef e #ifndef.

Sintaxe:

#if expression
//if body
#else
//else body
#endif

Exemplo:

Resultado:

5. # Erro

Como o próprio nome sugere, a diretiva de pré-processador de erro é usada para indicar um erro e, em seguida, o compilador gera um erro fatal se a diretiva de erro for encontrada e ignora as próximas etapas de compilação.

Resultado:

6. #pragma

Depende do compilador, pois diferentes sistemas operacionais e máquinas diferentes fornecem todos os tipos de recursos do sistema operacional que são usados ​​pelo compilador para oferecer informações adicionais ao compilador.

Sintaxe:

#pragma token

Exemplo:

Resultado:

Todo pré-processador tem seu próprio significado, pois a diretiva condicional é usada para verificar se uma parte do programa deve ser levada em consideração com base em cenários ou não.

Suponha que um programa deseje ser compilado em um ambiente especificado com a configuração específica do sistema operacional, mas assim que chega à fase de compilação, gera um erro ou pode fornecer um código inválido, apenas dando ao programa a possibilidade de um grande não para vincular o programa e executá-lo durante a execução. Também pode haver outra possibilidade em que o mesmo arquivo de origem com dois programas diferentes pode fazer uma verificação de consistência demorada ou seus dados imediatos ou imprimir os valores dos dados com depuração.

Além disso, esses cenários a serem criados com o cálculo também podem ser usados ​​para executar em uma máquina usando diretivas de pré-processamento.

Conclusão

A saída do pré-processador C se parece muito com a entrada, exceto que todas as diretivas de pré-processamento foram substituídas por linhas em branco ou espaços em branco. Arquivos e formatos diferentes têm sintaxes diferentes, dizendo que o início de um novo arquivo foi feito ou indicando que o retorno a um arquivo ou processamento deve ser feito antes da compilação.

Todos os cenários são usados ​​para permitir que outras pessoas saibam o poder do pré-processador C e como ele está evoluindo com diferentes versões do compilador iniciadas com os padrões GCC e ANSI.

Artigos recomendados

Este é um guia para diretivas de pré-processador em C. Aqui discutimos os tipos de diretivas de pré-processador com sintaxe e exemplos. Você também pode dar uma olhada nos seguintes artigos para saber mais:

  1. Número reverso em C
  2. Classificação em C
  3. Função hash em C
  4. Continuar declaração em C
  5. Classificando em C #
  6. Como a função hash funciona em php?