Elementos de Programação em C PDF
Elementos de Programação em C PDF
Elementos de Programação em C PDF
Diretivas de pr-processamento
() Elementos de programao em C 1 / 26
Sumrio
1 Diretivas de pr-processamento
3 Macros predefinidas
4 Erros de pr-processamento
5 Bibliografia
() Elementos de programao em C 2 / 26
Diretivas de pr-processamento Incluso de arquivos
Incluso de arquivos
() Elementos de programao em C 3 / 26
Diretivas de pr-processamento Incluso de arquivos
Incluso de arquivos
() Elementos de programao em C 3 / 26
Diretivas de pr-processamento Incluso de arquivos
() Elementos de programao em C 4 / 26
Diretivas de pr-processamento Macros
Definindo constantes
() Elementos de programao em C 5 / 26
Diretivas de pr-processamento Macros
Definindo constantes
Exemplo
# define VP 500
# define ANOS 13
A sequncia de # define MESES 1
definies ao lado faz # define JUROS_PERC 0.6
# define JUROS JUROS_PERC / 100
com que VF seja # define PERIODO ANOS * 12 + MESES
substituda por: # define VF VP * pow ((1 + JUROS ) , PERIODO )
() Elementos de programao em C 6 / 26
Diretivas de pr-processamento Macros
Definindo constantes
Exemplo
# define VP 500
# define ANOS 13
A sequncia de # define MESES 1
definies ao lado faz # define JUROS_PERC 0.6
# define JUROS JUROS_PERC / 100
com que VF seja # define PERIODO ANOS * 12 + MESES
substituda por: # define VF VP * pow ((1 + JUROS ) , PERIODO )
() Elementos de programao em C 6 / 26
Diretivas de pr-processamento Macros
Definindo constantes
Exemplo
# define VP 500
# define ANOS 13
A sequncia de # define MESES 1
definies ao lado faz # define JUROS_PERC 0.6
# define JUROS JUROS_PERC / 100
com que VF seja # define PERIODO ANOS * 12 + MESES
substituda por: # define VF VP * pow ((1 + JUROS ) , PERIODO )
() Elementos de programao em C 6 / 26
Diretivas de pr-processamento Macros
Definindo constantes
Exemplo
# define VP 500
# define ANOS 13
A sequncia de # define MESES 1
definies ao lado faz # define JUROS_PERC 0.6
# define JUROS JUROS_PERC / 100
com que VF seja # define PERIODO ANOS * 12 + MESES
substituda por: # define VF VP * pow ((1 + JUROS ) , PERIODO )
() Elementos de programao em C 6 / 26
Diretivas de pr-processamento Macros
Definindo constantes
Exemplo
# define VP 500
# define ANOS 13
A sequncia de # define MESES 1
definies ao lado faz # define JUROS_PERC 0.6
# define JUROS JUROS_PERC / 100
com que VF seja # define PERIODO ANOS * 12 + MESES
substituda por: # define VF VP * pow ((1 + JUROS ) , PERIODO )
() Elementos de programao em C 6 / 26
Diretivas de pr-processamento Macros parametrizadas
Simulando funes
() Elementos de programao em C 7 / 26
Diretivas de pr-processamento Macros parametrizadas
Simulando funes
#define abs(val, x)
if ((x) < 0) (val) = -(x); else (val) = (x)
() Elementos de programao em C 8 / 26
Diretivas de pr-processamento Macros parametrizadas
Simulando funes
#define abs(val, x)
if ((x) < 0) (val) = -(x); else (val) = (x)
() Elementos de programao em C 8 / 26
Diretivas de pr-processamento Macros parametrizadas
Simulando funes
#define abs(val, x)
if ((x) < 0) (val) = -(x); else (val) = (x)
abs(&num, -2)
if ((-2) < 0) (&num) = -(-2); else (&num) = (-2)
() Elementos de programao em C 8 / 26
Diretivas de pr-processamento Macros parametrizadas
Simulando funes
#define abs(val, x)
if ((x) < 0) (val) = -(x); else (val) = (x)
abs(&num, -2)
if ((-2) < 0) (&num) = -(-2); else (&num) = (-2)
() Elementos de programao em C 8 / 26
Diretivas de pr-processamento Macros parametrizadas
Simulando funes
#define abs(val, x)
if ((x) < 0) (val) = -(x); else (val) = (x)
abs(&num, -2)
if ((-2) < 0) (&num) = -(-2); else (&num) = (-2)
() Elementos de programao em C 8 / 26
Diretivas de pr-processamento Macros parametrizadas
() Elementos de programao em C 9 / 26
Diretivas de pr-processamento Macros parametrizadas
Exemplo
A macro
#define soma(x, ...) x + adiciona(__VA_ARGS__)
resulta nas seguintes substituies:
soma(2, 3)
soma(a, b, c)
soma(6, 4, x + 3, c)
() Elementos de programao em C 10 / 26
Diretivas de pr-processamento Macros parametrizadas
Exemplo
A macro
#define soma(x, ...) x + adiciona(__VA_ARGS__)
resulta nas seguintes substituies:
soma(2, 3) 2 + adiciona(3)
soma(a, b, c)
soma(6, 4, x + 3, c)
() Elementos de programao em C 10 / 26
Diretivas de pr-processamento Macros parametrizadas
Exemplo
A macro
#define soma(x, ...) x + adiciona(__VA_ARGS__)
resulta nas seguintes substituies:
soma(2, 3) 2 + adiciona(3)
soma(a, b, c) a + adiciona(b, c)
soma(6, 4, x + 3, c)
() Elementos de programao em C 10 / 26
Diretivas de pr-processamento Macros parametrizadas
Exemplo
A macro
#define soma(x, ...) x + adiciona(__VA_ARGS__)
resulta nas seguintes substituies:
soma(2, 3) 2 + adiciona(3)
soma(a, b, c) a + adiciona(b, c)
soma(6, 4, x + 3, c) 6 + adiciona(4, x + 3, c)
() Elementos de programao em C 10 / 26
Diretivas de pr-processamento Macros parametrizadas
() Elementos de programao em C 11 / 26
Diretivas de pr-processamento Macros parametrizadas
Exemplo
A macro
#define imprime(x) printf("arg " #x " = %d\n", (x))
resulta nas seguintes substituies:
imprime(x)
imprime(4 + a)
() Elementos de programao em C 12 / 26
Diretivas de pr-processamento Macros parametrizadas
Exemplo
A macro
#define imprime(x) printf("arg " #x " = %d\n", (x))
resulta nas seguintes substituies:
imprime(4 + a)
() Elementos de programao em C 12 / 26
Diretivas de pr-processamento Macros parametrizadas
Exemplo
A macro
#define imprime(x) printf("arg " #x " = %d\n", (x))
resulta nas seguintes substituies:
() Elementos de programao em C 12 / 26
Diretivas de pr-processamento Macros parametrizadas
Exemplo
A macro
#define imprime(x) printf("arg " #x " = %d\n", (x))
resulta nas seguintes substituies:
() Elementos de programao em C 12 / 26
Diretivas de pr-processamento Macros parametrizadas
Exemplo
A macro
#define imprime(x) printf("arg " #x " = %d\n", (x))
resulta nas seguintes substituies:
() Elementos de programao em C 12 / 26
Diretivas de pr-processamento Macros parametrizadas
Concatenando argumentos
() Elementos de programao em C 13 / 26
Diretivas de pr-processamento Macros parametrizadas
Concatenando argumentos
Exemplo
As macros
#define arg(x, y, z, w) int val ## x ## y ## z = w
#define imp(x,y,z)
printf("val" #x #y #z " = %d\n", val ## x ## y ## z)
produzem as seguintes substituies:
arg(1, 2, 3, 869);
arg(1,2, ,869);
arg( , , ,869);
imp(1, 2, 3);
imp(1,2,);
imp( , , );
() Elementos de programao em C 14 / 26
Diretivas de pr-processamento Macros parametrizadas
Concatenando argumentos
Exemplo
As macros
#define arg(x, y, z, w) int val ## x ## y ## z = w
#define imp(x,y,z)
printf("val" #x #y #z " = %d\n", val ## x ## y ## z)
produzem as seguintes substituies:
imp(1, 2, 3);
imp(1,2,);
imp( , , );
() Elementos de programao em C 14 / 26
Diretivas de pr-processamento Macros parametrizadas
Concatenando argumentos
Exemplo
As macros
#define arg(x, y, z, w) int val ## x ## y ## z = w
#define imp(x,y,z)
printf("val" #x #y #z " = %d\n", val ## x ## y ## z)
produzem as seguintes substituies:
imp(1, 2, 3);
imp(1,2,);
imp( , , );
() Elementos de programao em C 14 / 26
Diretivas de pr-processamento Macros parametrizadas
Concatenando argumentos
Exemplo
As macros
#define arg(x, y, z, w) int val ## x ## y ## z = w
#define imp(x,y,z)
printf("val" #x #y #z " = %d\n", val ## x ## y ## z)
produzem as seguintes substituies:
imp(1, 2, 3);
imp(1,2,);
imp( , , );
() Elementos de programao em C 14 / 26
Diretivas de pr-processamento Macros parametrizadas
Concatenando argumentos
Exemplo
As macros
#define arg(x, y, z, w) int val ## x ## y ## z = w
#define imp(x,y,z)
printf("val" #x #y #z " = %d\n", val ## x ## y ## z)
produzem as seguintes substituies:
() Elementos de programao em C 14 / 26
Diretivas de pr-processamento Macros parametrizadas
Concatenando argumentos
Exemplo
As macros
#define arg(x, y, z, w) int val ## x ## y ## z = w
#define imp(x,y,z)
printf("val" #x #y #z " = %d\n", val ## x ## y ## z)
produzem as seguintes substituies:
() Elementos de programao em C 14 / 26
Diretivas de pr-processamento Macros parametrizadas
Concatenando argumentos
Exemplo
As macros
#define arg(x, y, z, w) int val ## x ## y ## z = w
#define imp(x,y,z)
printf("val" #x #y #z " = %d\n", val ## x ## y ## z)
produzem as seguintes substituies:
() Elementos de programao em C 14 / 26
Diretivas de pr-processamento Macros parametrizadas
prefervel a
#define mult(x, y) x * y
() Elementos de programao em C 15 / 26
Diretivas de pr-processamento Macros parametrizadas
prefervel a
#define mult(x, y) x * y
mult(x + 3, x + 3) x + 3 * x + 3
() Elementos de programao em C 15 / 26
Diretivas de pr-processamento Macros parametrizadas
diferente de
int dobro(int x) {return x + x;}
() Elementos de programao em C 16 / 26
Diretivas de pr-processamento Macros parametrizadas
diferente de
int dobro(int x) {return x + x;}
x = 4; resulta em x = 5
y = dobro(++x); y = 10
() Elementos de programao em C 16 / 26
Diretivas de pr-processamento Tornando definies sem efeito
() Elementos de programao em C 17 / 26
Diretivas de pr-processamento Testando a definio de macros
Operador defined
A expresso defined NOME ou defined(NOME) resulta
no valor 1 (verdadeiro), se a macro NOME est definida,
ou no valor 0 (falso), em caso contrrio.
Operador !defined
A expresso !defined NOME ou !defined(NOME) resulta
no valor 1 (verdadeiro), se a macro NOME no est definida, ou
no valor 0 (falso), em caso contrrio.
() Elementos de programao em C 18 / 26
Incluso condicional de cdigo
() Elementos de programao em C 19 / 26
Incluso condicional de cdigo
() Elementos de programao em C 20 / 26
Incluso condicional de cdigo Avaliao da condio
Avaliao da condio
() Elementos de programao em C 21 / 26
Incluso condicional de cdigo Avaliao da condio
Avaliao da condio
Exemplo
Para as macros ao lado, a tabela a seguir # define E1
mostra como a condio da diretiva #if # undef E2
avaliada. # define E2 12
# define E3
# undef E3
# define E5 LINUX
# define SUNOS 1
() Elementos de programao em C 22 / 26
Macros predefinidas
Macro Definio
__DATE__ Data do pr-processamento da unidade de compilao
__TIME__ Hora do pr-processamento da unidade de compilao
__FILE__ Nome do arquivo em que utilizada.
__func__ Nome da funo em que utilizada
(no , de fato, uma macro).
__FUNCTION__ Nome da funo em que utilizada (extenso do gcc).
__LINE__ Nmero da linha do arquivo-fonte na qual ocorre
a referncia macro.
() Elementos de programao em C 23 / 26
Macros predefinidas
Exemplo
printf (" erro : arquivo %s , linha % d .\ n " ,
arq , linha );
/* codigo omitido */
}
() Elementos de programao em C 24 / 26
Erros de pr-processamento
Erros de pr-processamento
Exemplo
No trecho de programa a seguir, se a macro QTD for menor ou igual a 20, a
compilao interrompida na fase de pr-processamento produzindo uma
mensagem de erro que inclui o texto tamanho QTD invalido.
# if QTD > 20
int vet [ QTD ];
# else
# error tamanho QTD invalido
# endif
() Elementos de programao em C 25 / 26
Bibliografia
Bibliografia
ISO/IEC
C Programming Language Standard
ISO/IEC 9899:2011, International Organization for Standardization;
International Electrotechnical Commission, 3rd edition, WG14/N1570
Committee final draft, abril de 2011.
Francisco A. C. Pinheiro
Elementos de programao em C
Bookman, Porto Alegre, 2012.
www.bookman.com.br, www.facp.pro.br/livroc
() Elementos de programao em C 26 / 26