A linguagem C nos permite definir macros, constantes e renomear recursos 
                utilizando a diretiva #define. Com o uso dessa diretiva, podemos declarar macros que durante a compilação, 
                suas chamadas são substituídas pelas declarações contidas em seus corpos.
            
            Sintaxe
            #define nome_macro valor|expressão|funcao 
            Exemplo 1
            
#include <stdio.h>
#define DEBUG 1
void main()
{
    printf("%d \n",DEBUG); //DEBUG é substituído por 1 antes da compilação.
}
            Saída
            1
            
                Podemos dar apelidos aos tipos de dados nativos da linguagem C "criando" novos 
                tipos para evitar a  digitação de longos tipos de dados:
            
            Exemplo 2
            
#include <stdio.h>
#define uint unsigned int
void main()
{
    uint teste = 999; //uint é substituído por unsigned int
    printf("%u \n",teste);
}
            Saída
            999
            
                Além de criar apelidos para os tipos de dados, como no exemplo acima, podemos 
                apelidar também os comandos da linguagem C, como no exemplo abaixo:
            
            Exemplo 3
            
#include <stdio.h>
#define se if
#define senao else
int main()
{
    se(1 != 1)
        printf("%s \n", "if substituido!");
    senao
        printf("%s \n", "else substituido!");
}
            Saída
            else substituido!
            
                A diretiva #define nos permite a criação de macros mais complexas em que 
                seu conteúdo, sendo possível utilizar variáveis, funções e expressões.
                Mais sobre macros pode ser visto em C Diretivas: Macros.