O operador ##, utilizado na definição de macros, nos possibilita a 
                substituição de símbolos ou tokens em declarações de código em seu corpo. 
            
            Sintaxe
            #define NOME_MACRO( parametro1, parametro2 ) parametro1##parametro2
            Exemplo
            //main.c
#define MINHA_MACRO(parametro1,parametro2) \
int var_##parametro1=parametro2
            
                No exemplo de uso acima, criamos uma variável int em que seu nome é composto 
                dos termos var_ e ##parametro1 cujos argumentos parametro1 e 
                parametro2 foram passados.
            
            Exemplo 1
            
#include <stdio.h>
#define MINHA_MACRO(parametro1, parametro2) \
        int var_##parametro1=parametro2
void main()
{
    MINHA_MACRO( teste, 999);
    printf("%i",var_teste);
}
            Saída
            999
            
                No exemplo acima, o argumento teste foi substituído pelo operador 
                ##parametro1, e o segundo argumento, 999, foi substituído por 
                parametro2 criando assim a declaração da variável abaixo:
            
            int var_teste = 999;
            
                É importante observar que não criamos a variável var_teste previamente, e que a 
                mesma foi criada como o tipo int, porém, podemos modificar a macro acima 
                para criar variáveis de outros tipos:
            
            Exemplo 2
            
#include <stdio.h>
#define MINHA_MACRO(tipo_var , nome_var, valor_var) \
        tipo_var var_##nome_var=valor_var
void main()
{
    MINHA_MACRO( unsigned short,inteira, 999);
    printf("%i\n",var_inteira);
    MINHA_MACRO( float,decimal, 10.09);
    printf("%.02f",var_decimal);
}
            Saída
            999
10.09
            
                O operador ## também pode ser utilizado em conjunto com funções de forma 
                a criarmos uma codificação de chamada genérica baseada em um valor passado 
                como argumento:
            
            Exemplo 3
            
#include <stdio.h>
void funcao1(void)
{
    printf("funcao1\n");
}
void funcao2(void)
{
    printf("funcao2\n");
}
#define EXECUTA_FUNCAO(numero_funcao)\
        funcao##numero_funcao()
void main()
{
    EXECUTA_FUNCAO(1);
    EXECUTA_FUNCAO(2);
}
            Saída
            funcao1
funcao2
            
                No exemplo acima, não podemos usar variáveis, constantes e enumeradores como valor 
                do argumento numero_funcao, sendo apenas valores inteiros.
            
            
                O uso do ## leva em consideração a necessidade e também da criatividade 
                de quem está codificando, mostrando-se um recurso significativo para criação 
                macros mais complexas.