To make a function use as many arguments as are provided to it in C it is necessary to use "..." when declaring the parameters.
In the case of the example you presented I suggest preserving the function a() as is:
void a(color c, string s) {
setColor(c);
printf("%s ",s);
setColor(15); // o número 15 seleciona a cor branca
}
And use a new function func() that would receive the list of parameters of variable size and call() each pair (color, string). It would look like this:
void func(int num, ...) { // o inteiro é obrigatório, os três pontinhos
// indicam que a quantidade de parâmetros será
// determinada em tempo de execução
va_list valist; // estrutura que irá receber a lista de argumentos
va_start(valist, num); // macro que inicializa a lista de argumentos
int i, cor;
char * palavra;
for ( i= 0; i < num; i=i+2 ) {
cor = va_arg(valist, int);
palavra = va_arg(valist, char *);
a (cor, palavra);
}
va_end(valist); // limpa a memória reservada para valist
}
In the case of this example your call would look like this:
func(8, 1,"Este",2,"É",8,"Um",4,"Exemplo");
Ference (in English).