Você está na página 1de 8

Linguagem C

Pr-processador
g.p. telles

Linguagem C p.1

Compilao

Programa C

Declaracoes
do programador

0+

Definicoes
do programador

1+

Pre-processador

Declaracoes
de bibliotecas

0+

Compilador

codigo-fonte

codigo-objeto

codigo-objeto

Definicoes
de bibliotecas

1+

Ligador
0+

executavel
Linguagem C p.2

Diretivas do pr-processador
Uma inha que comea com # uma diretiva de
pr-processador (pode ser precedida por espaos).
Exemplos:
#include
#define

A sintaxe independente da linguagem. O


pre-processador no sabe C.
O efeito de uma diretiva comea onde ela aparece
em um arquivo e continua at o fim do arquivo ou
at que a diretiva seja desativada.

Linguagem C p.3

#include
#include <arquivo>
#include "arquivo"

O pr-processador substitui a linha por uma cpia


do contedo do arquivo.
O arquivo procurado em diretrios que dependem
do sistema.
A forma com aspas inclui o diretrio atual na busca.
No h restrio ao contedo do arquivo. Pode
conter inclusive outras diretivas, que sero
expandidas tambm.

Linguagem C p.4

#define
#define identificador tokens

Uma definio feita com #define chamada de


constante simblica ou macro.
O pr-processador substitui cada ocorrncia do
identificador por tokens, exceto em constantes
string.
Tokens vai at o fim da linha e pode ser nulo.

O caracter \ permite continuar a definio da


macro nas linhas seguintes:
#define macro texto_1 \
texto_2 \
...
Linguagem C p.5

Exemplos
#include <stdio.h>
#define
#define
#define
#define

FIRST_CHAR a
SECOND_CHAR b
COMMA ,
STRING "um exemplo de macro."

void main() {
putchar(FIRST_CHAR);
putchar(SECOND_CHAR);
putchar(COMMA);
puts(STRING);
}

Linguagem C p.6

#undef
Faz com que a definio da macro seja desativada
daquele ponto em diante.
#define pi 3.14
...
#undef pi

Linguagem C p.7

Constantes simblicas
Constantes simblicas melhoram a clareza,
legibilidade e facilitam a manuteno.
#define MAX 100
int V[MAX], i;
for (i=1; i<MAX; i++)
V[i] = 1;

Linguagem C p.8

Constantes simblicas
Podem aumentar a velocidade de execuo:
#define TAXA 0.3
...
imposto = preco * TAXA;

mais eficiente que


float taxa = 0.3;
...
imposto = preco * taxa;

pois o no preciso ler taxa da memria.

Linguagem C p.9

Macros com parmetros


#define id(id,...,id) tokens

Exemplo: #define quad(x) ((x)*(x))


quad(7+z) = ((7+z)*(7+z))
quad(quad(2)) = ((((2)*(2)))*(((2)*(2))))

Linguagem C p.10

Macros com parmetros


Macros so usadas no lugar de funes para evitar
a chamada da funo e gerar cdigo mais eficiente.
#define min(x,y) (((x<y))?(x):(y))

Uma definio de macro pode usar tanto macros


quanto funes em seu corpo.
#define min(a,b,c,d) min(min(a,b),min(c,d))

Linguagem C p.11

Macros com parmetros


Problema potencial:
#define quad(x) ((x)*(x))
int c=2;
quad(c++);

Exemplo: exm-macros-1.c

Linguagem C p.12

Syntatic sugar
Macros podem ser usadas para alterar a sintaxe da
linguagem, definindo comandos e operadores:
#define eq ==
#define elsif else if
if (a eq 0) {}
elsif (a eq 1) {}
else {}

Esta prtica no recomendvel, porque pode


dificultar a manuteno.

Linguagem C p.13

Compilao condicional
Diretivas que fazem com que o pr-processador no
envie trechos do programa para o compilador.
#if express
ao-integral-constante
#elif express
ao-integral-constante
#else
#endif
#ifdef identificador
#endif
#ifndef identificador
#endif
defined(constante)
Linguagem C p.14

Compilao condicional
til para
Setar variveis que dependem da plataforma.
Ativar/desativar cdigo de depurao.
Comentar trechos de cdigo j comentados.
Exemplo:
#ifdef UNIX
const int nice = 10;
#elif defined(MSDOS)
const int nice = 0;
#else
const int nice = 5;
#endif

Linguagem C p.15

Você também pode gostar