Diretiva #define:
#define SEGUNDA 0
#define TERCA 1
#define QUARTA 2
#define QUINTA 3
#define SEXTA 4
main()
{
int dia = TERCA;
if(dia == SEGUNDA)
printf("Dia da semana e segunda.");
else if(dia == TERCA)
printf("Dia da semana e terca");
else if(dia == QUARTA)
printf("Dia da semana e quarta");
else if(dia == QUINTA)
printf("Dia da semana e quinta");
else if(dia == SEXTA)
printf("Dia da semana e terca");
getchar();
}
O que a diretiva define está fazendo é literalmente substituir as constantes no código pelos números. É como se reescrevêssemos o código apagando os dias da semana e colocando seus respectivos valores inteiros.
#define CHAPTER "Este e o capitulo 6"
main()
{
printf("%s", CHAPTER);
getchar();
}
Não é preciso dizer o poder que essa diretiva possui. É possível até mesmo criar uma nova linguagem de programação a partir dela.
#define MAX(a,b) (a > b) ? a : b
main()
{
int a = 10, b = 5;
printf("O valor maior e: %d", MAX(a,b));
getchar();
}
Podemos criar funções na diretiva define e usá-la dentro do código.
#define SQUARE(x) (x * x)
main()
{
int x = SQUARE(2 + 5)
printf("%d", x);
getchar();
}
Executa: 17
Pois o cálculo é (2 + 5 * 2 + 5). O operador de multiplicação tem prioridade sobre o de soma, então o resultado não é o que esperávamos.
#define SQUARE(x) ((x) * (x))
main()
{
int x = SQUARE(2 + 5)
printf("%d", x);
getchar();
}
Executa: "A letra em maiuscula: A." Converte qualquer letra em maiúscula. Repare na diretiva define o uso de barra invertida para continuar o comando. Sobre a função: o que parece é que estamos retirando o caractere 'a' da variável letra e inserindo 'A'. Acredito que esteja na verdade sendo feita uma operação aritmética com o código ASCII, e não propriamente substituindo os caracteres.
Diretiva #include:
Quem programa em outras linguagens sabe que determinadas constantes, funções, rotinas ou métodos podem estar dentro de outros arquivos fonte, ou até mesmo dentro de outros diretórios. Através dessa diretiva, podemos utilizar as constantes e funções de outros arquivos fonte que são padrão da linguagem C ou desenvolvidos e disponibilizados para isso. Esses arquivos têm a extensão .H.
Em algumas IDEs (Ferramentas de desenvolvimento) como o Bloodshed Dev-C++ 5, não é preciso fazer #include de alguns arquivos .H padrão, pois são automaticamente carregados na compilação. Um exemplo é a função getchar() que sempre estamos utilizando nos programas.
#include &lsaquo stdio.h &rsaquo
main()
{
char letra;
for(letra = 'A'; letra <= 'Z';\
letra++)
putchar(letra);
getchar();
}
A função putchar() imprime na tela um caractere por vez. Ela está dentro do código fonte do arquivo stdio.h. Se você estiver usando o Dev-C++ 5, vai perceber que tanto faz colocar a linha da diretiva #include, a função vai executar do mesmo jeito.
#include &lsaquo stdio.h &rsaquo
main()
{
char letra;
printf("Digite uma letra e pressione\
ENTER.\n")
letra = getchar();
printf("A letra digitada foi %c", letra);
getchar();
}
A função getchar() recebe um caractere ou string e espera o usuário pressionar ENTER para armazenar o valor na variável letra.
#include &lsaquo stdio.h &rsaquo
main()
{
char letra;
printf("Digite uma linha de texto\n");
do
{
letra = getchar();
putchar(letra);
}
while(letra != '\n');
printf("%c", letra);
getchar();
}