Em todas as funções que criamos, o número de parâmetros deve ser conhecido com antecedência. Mas a linguagem C permite que passamos quantos parâmetros quiser para uma chamada de função. Para isso a linguagem fornece o especificador ellipsis ( ou reticências ).
A ellipsis deve ser sempre o último parâmetro da função e seus componentes devem ser do mesmo tipo.
A ellipsis "informa" ao compilador que a função CalcularMedia poderá conter x parâmetros. Você deve estar ciente que o compilador aloca os parâmetros sequencialmente, isto quer dizer que, na memória, supondo que o primeiro parâmetro (todos do tipo char, isto é, usam 1 byte) ocupa o endereço 44, o segundo parâmetro irá ocupar o endereço 45, o terceiro parâmetro irá ocupar o endereço 46 e, assim por diante. O que temos que fazer é simplesmente apontar para o primeiro parâmetro da sequência e "caminhar" nesta sequência, recuperando assim seus valores.
Exemplo
//a memória para os parâmetros será alocada dessa forma: [n][p0][p1][...][pn] | |
//por isso usamos o endereço de n para obter o endereço dos outros parametros. | |
unsigned calcular_media(char n, ... ) { | |
char i; | |
unsigned res = 0; | |
for(i = 1; i <= n; i++) { | |
res += ((char*)&n)[i]; //aponta para o i-esimo parametro e recupera seu valor. | |
} | |
return (res / n); | |
} | |
void main() { | |
//calcula a media aritmetica dos 10 números. | |
unsigned media = calcular_media(10, 11, 3, 4, 5, 6, 6, 8, 7, 6, 14); | |
} |
Sugestão para o próximo post : PIC com Módulo ENC28j60. Implementado no MikroC, esta dificil encontrar na rede.
ResponderExcluirE ai amigo conseguiu implementar o ENC com o MikroC? Também só encontro exemplos do CCS.
Excluir