Fork me on GitHub

Microcontrolandos

O Blog está passando por uma fase de mudanças. Todos os posts estão sendo atualizados, códigos, links e imagens estão sendo arrumados. Conteúdos novos ainda estão por vir.

TUTORIAL: Ellipsis

Compartilhe:

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);
}
view raw ellipsis.c hosted with ❤ by GitHub

Escreva um comentário

2 comentários:

  1. Sugestão para o próximo post : PIC com Módulo ENC28j60. Implementado no MikroC, esta dificil encontrar na rede.

    ResponderExcluir
    Respostas
    1. E ai amigo conseguiu implementar o ENC com o MikroC? Também só encontro exemplos do CCS.

      Excluir