segunda-feira, 26 de agosto de 2013

O Pré-Processador em C



Introdução

O pré-processador C é um programa que examina o programa fonte em C e executa certas modificações nele, baseado em instruções chamadas diretivas.
O pré-processador faz parte do compilador e pode ser considerado uma linguagem dentro da linguagem.
Ele atua antes da compilação de um programa, fazendo pesquisa e substituição no código fonte antes de iniciar a compilação.
Como já dito, a substituição basea-se em diretivas definidas no corpo do código fonte.
As diretivas em sempre iniciam com o caracter #.

Algumas das principais diretivas da linguagem C são as seguintes:
#include
#define
#error
#ifdef
#undef
entre outras

A diretiva #define

Com a diretiva #define definimos um identificador (escrito em maiúsculo) que deverá ser localizado.
Em seguida, após pelo menos um espaço em branco, definimos o texto resultante que substituirá o identificador localizado.
A operação toda (definição mais pesquisa e substituição) é denominada de macro.

Exemplo 1

#include <stdio.h>
#include <conio.h>

#define PI 3.14159

float area(float r);

void main()
{
    float raio;
    printf("Digite o raio da esfera: ");
    scanf("%f",&raio);
    printf("A area da esfera eh %f",area(raio));
    getch();
}

float area(float r)
{
    return(4 * PI * r * r);
}



Por Que Usar #define ?

Talvez você se pergunte o que ganhamos substituindo, no programa anterior, PI por 3.14159.
Suponhamos que você tenha um programa em que a constante 3.14159 apareça muitas vezes.
Suponha, ainda, que agora você queira uma precisão maior e queira trocar 3.14159 por 3.141592.

Você deverá ir passo a passo através do programa e trocar cada ocorrência que encontrar da constante.
Entretanto, se você tiver definido 3.14159 como sendo PI na diretiva #define, você deverá somente fazer uma troca.

Exemplo 2

#include <stdio.h>
#include <conio.h>

#define SOMA(x,y) (x+y)

void main()
{
    printf("Resultado: %d",SOMA(3,5));
    getch();
}



Exemplo 3

#include <stdio.h>
#include <conio.h>

#define ERRO printf("\nERRO: NUMERO INVALIDO")

void main()
{
    int i;
    printf("Digite um numero de 0 a 100: ");
    scanf("%d",&i);
    if( (i<0) || (i>100))
        ERRO;
    getch();
}



Exercícios

Torne o código abaixo interpretável pelo compilador C.

algoritmo
inicio
    escreva("teste");
    espere;
fim


Solução

#include <stdio.h>
#include <conio.h>

#define algoritmo void main()
#define inicio {
#define fim }
#define escreva(x) printf(x)
#define espere getch()

algoritmo
inicio
    escreva("teste");
    espere;
fim

0 comentários:

Postar um comentário

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Best Buy Coupons