Pré-processador C e macros

Neste tutorial, você será apresentado aos pré-processadores c e aprenderá a usar #include, #define e compilação condicional com a ajuda de exemplos.

O pré-processador C é um pré-processador de macro (permite que você defina macros) que transforma seu programa antes de ser compilado. Essas transformações podem ser a inclusão de arquivo de cabeçalho, expansões de macro etc.

Todas as diretivas de pré-processamento começam com um #símbolo. Por exemplo,

 #define PI 3.14

Alguns dos usos comuns do pré-processador C são:

Incluindo Arquivos de Cabeçalho: #include

O #includepré-processador é usado para incluir arquivos de cabeçalho em programas C. Por exemplo,

 #include 

Aqui stdio.hestá um arquivo de cabeçalho. A #includediretiva do pré-processador substitui a linha acima pelo conteúdo do stdio.harquivo de cabeçalho.

Essa é a razão pela qual você precisa usar #include antes de usar funções como scanf()e printf().

Você também pode criar seu próprio arquivo de cabeçalho contendo declaração de função e incluí-lo em seu programa usando esta diretiva de pré-processador.

 #include "my_header.h"

Visite esta página para saber mais sobre como usar arquivos de cabeçalho.

Macros usando #define

Uma macro é um fragmento de código que recebe um nome. Você pode definir uma macro em C usando a #definediretiva do pré - processador.

Aqui está um exemplo.

 #define c 299792458 // speed of light

Aqui, quando usamos c em nosso programa, ele é substituído por 299792458.

Exemplo 1: #define o pré-processador

 #include #define PI 3.1415 int main() ( float radius, area; printf("Enter the radius: "); scanf("%f", &radius); // Notice, the use of PI area = PI*radius*radius; printf("Area=%.2f",area); return 0; )

Funciona como macros

Você também pode definir macros que funcionam de maneira semelhante, como uma chamada de função. Isso é conhecido como macros semelhantes a funções. Por exemplo,

 #define circleArea(r) (3.1415*(r)*(r))

Sempre que o programa é encontrado circleArea(argument), ele é substituído por (3.1415*(argument)*(argument)).

Suponha que passamos 5 como um argumento e ele se expande conforme abaixo:

 circleArea(5) expands to (3.1415*5*5)

Exemplo 2: usando o pré-processador #define

 #include #define PI 3.1415 #define circleArea(r) (PI*r*r) int main() ( float radius, area; printf("Enter the radius: "); scanf("%f", &radius); area = circleArea(radius); printf("Area = %.2f", area); return 0; )

Visite esta página para saber mais sobre macros e #define o pré-processador.

Compilação Condicional

Na programação C, você pode instruir o pré-processador se deve incluir um bloco de código ou não. Para fazer isso, podem ser usadas diretivas condicionais.

É semelhante a uma ifdeclaração com uma grande diferença.

A ifinstrução é testada durante o tempo de execução para verificar se um bloco de código deve ser executado ou não, enquanto as condicionais são usadas para incluir (ou pular) um bloco de código em seu programa antes da execução.

Usos de condicional

  • use códigos diferentes dependendo da máquina, sistema operacional
  • compilar o mesmo arquivo fonte em dois programas diferentes
  • excluir determinado código do programa, mas mantê-lo como referência para fins futuros

Como usar condicional?

Para usar o condicional, #ifdef, #if, #defined, #elsee #elseifdirectivas são utilizados.

Diretiva #ifdef

 #ifdef MACRO // conditional codes #endif 

Aqui, os códigos condicionais são incluídos no programa apenas se MACRO for definido.

Diretiva #if, #elif e #else

 #if expression // conditional codes #endif 

Aqui, expressão é uma expressão do tipo inteiro (pode ser números inteiros, caracteres, expressão aritmética, macros e assim por diante).

Os códigos condicionais são incluídos no programa apenas se a expressão for avaliada para um valor diferente de zero.

A #elsediretiva opcional pode ser usada com #ifdiretiva.

 #if expression conditional codes if expression is non-zero #else conditional if expression is 0 #endif 

Você também pode adicionar condicional aninhada ao seu #if… #elseuso#elif

 #if expression // conditional codes if expression is non-zero #elif expression1 // conditional codes if expression is non-zero #elif expression2 // conditional codes if expression is non-zero #else // conditional if all expressions are 0 #endif 

#definiram

O operador especial #defined é usado para testar se uma determinada macro está definida ou não. Geralmente é usado com a diretiva #if.

 #if defined BUFFER_SIZE && BUFFER_SIZE>= 2048 // codes 

Macros Predefinidas

Aqui estão algumas macros predefinidas na programação C.

Macro Valor
__DATE__ Uma string contendo a data atual
__FILE__ Uma string contendo o nome do arquivo
__LINE__ Um inteiro que representa o número da linha atual
__STDC__ Se seguir o padrão ANSI C, o valor é um número inteiro diferente de zero
__TIME__ Uma string contendo a data atual.

Exemplo 3: Obtenha a hora atual usando __TIME__

O programa a seguir emite a hora atual usando __TIME__macro.

 #include int main() ( printf("Current time: %s",__TIME__); )

Resultado

 Hora atual: 19:54:39

Leituras Recomendadas

  • Controle de linha
  • Pragmas
  • Saída do pré-processador
  • Outras diretivas

Artigos interessantes...