C Pré-processador e Macros
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 definir 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
#include
pré-processador é usado para incluir arquivos de cabeçalho em programas C. Por exemplo,
#include <stdio.h>
Aqui,
stdio.h
é um arquivo de cabeçalho. O #include
diretiva de pré-processador substitui a linha acima com o conteúdo de stdio.h
arquivo de cabeçalho. Essa é a razão pela qual você precisa usar
#include <stdio.h>
antes de poder 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 o
#define
Directiva 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 pré-processador
#include <stdio.h>
#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;
}
Função como macros
Você também pode definir macros que funcionam de maneira semelhante a uma chamada de função. Isso é conhecido como macros do tipo função. Por exemplo,
#define circleArea(r) (3.1415*(r)*(r))
Toda vez que o programa encontra
circleArea(argument)
, ele é substituído por (3.1415*(argument)*(argument))
. Suponha que passamos 5 como um argumento, então ele se expande como abaixo:
circleArea(5) expands to (3.1415*5*5)
Exemplo 2:usando #define pré-processador
#include <stdio.h>
#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 pré-processador.
Compilação condicional
Na programação C, você pode instruir o pré-processador a incluir ou não um bloco de código. Para fazer isso, diretivas condicionais podem ser usadas.
É semelhante a um
if
declaração com uma grande diferença. O
if
A instruçã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
- usar código diferente dependendo da máquina, sistema operacional
- compile o mesmo arquivo fonte em dois programas diferentes
- para excluir determinado código do programa, mas mantê-lo como referência para fins futuros
Como usar condicional?
Para usar condicional,
#ifdef
, #if
, #defined
, #else
e #elif
diretivas são usadas. Diretiva #ifdef
#ifdef MACRO
// conditional codes
#endif
Aqui, os códigos condicionais são incluídos no programa somente se MACRO é definido.
Diretiva #if, #elif e #else
#if expression
// conditional codes
#endif
Aqui, expressão é uma expressão do tipo inteiro (pode ser inteiros, caracteres, expressão aritmética, macros e assim por diante).
Os códigos condicionais são incluídos no programa somente se a expressão é avaliado como um valor diferente de zero.
O opcional
#else
diretiva pode ser usada com #if
diretiva.
#if expression
conditional codes if expression is non-zero
#else
conditional if expression is 0
#endif
Você também pode adicionar condicionais aninhadas ao seu
#if...#else
usando #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
#definido
O operador especial #defined é usado para testar se uma determinada macro está definida ou não. É frequentemente usado com #if diretiva.
#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048
// codes
Macros predefinidos
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 número inteiro representando o número da linha atual |
__STDC__ | Se seguir o padrão ANSI C, o valor será um inteiro diferente de zero |
__TIME__ | Uma string contendo a data atual. |
Exemplo 3:obter a hora atual usando __TIME__
O programa a seguir gera a hora atual usando
__TIME__
macro.
#include <stdio.h>
int main()
{
printf("Current time: %s",__TIME__);
}
Saída
Current time: 19:54:39
Leituras recomendadas
- Controle de linha
- Pragmas
- Saída do pré-processador
- Outras diretivas
Linguagem C