Chamadas de função
A chamada de função é uma expressão que passa o controle e argumentos (se houver) para uma função e tem o seguinte formato:
expressão (lista de expressãoopt)
onde expressão é um nome de função ou é avaliada como um endereço de função e lista de expressão é uma lista de expressões (separados por vírgulas).Os valores dessas expressões último são os argumentos passados para a função.Se a função não retorna um valor, então você declará-lo de uma função que retorna void.
Se uma declaração existe antes da chamada de função, mas nenhuma informação é fornecida sobre os parâmetros, os argumentos não declarados simplesmente passam por conversões aritméticas usuais.
Observação |
---|
As expressões na lista de argumentos de função podem ser avaliadas em qualquer ordem, para que os argumentos cujos valores podem ser alterados por efeitos colaterais de um outro argumento indefinidos valores.O ponto de seqüência definido pelo operador do chamada de função garante apenas que todos os efeitos colaterais na lista de argumentos são avaliados antes que o controle passa para a função chamada.(Observe que a ordem na qual os argumentos são colocados no empilhamento é uma outra questão). Consulte Pontos de seqüência para obter mais informações. |
O único requisito em qualquer chamada de função é que a expressão antes dos parênteses deve ser avaliada como um endereço de função.Isso significa que uma função pode ser chamada por meio de qualquer expressão do ponteiro de função.
Exemplo
Este exemplo ilustra as chamadas de função chamadas a partir de um switch instrução:
int main()
{
/* Function prototypes */
long lift( int ), step( int ), drop( int );
void work( int number, long (*function)(int i) );
int select, count;
.
.
.
select = 1;
switch( select )
{
case 1: work( count, lift );
break;
case 2: work( count, step );
break;
case 3: work( count, drop );
/* Fall through to next case */
default:
break;
}
}
/* Function definition */
void work( int number, long (*function)(int i) )
{
int i;
long j;
for ( i = j = 0; i < number; i++ )
j += ( *function )( i );
}
Neste exemplo, a função chamar em main,
work( count, lift );
passa uma variável integer, counte o endereço da função lift para a função work.Observe que o endereço de função é passado simplesmente fornecendo o identificador da função, uma vez que um identificador de função é avaliada como uma expressão do ponteiro.Para usar um identificador de função dessa forma, a função deve ser declarada ou definida antes que o identificador é usado; Caso contrário, o identificador não é reconhecido.No caso, um protótipo do work é fornecido no início do main função.
O parâmetro function na work está declarada como um ponteiro para uma função com uma int argumento e retornando um longo valor.Os nome do parâmetro entre parênteses são necessários; sem eles, a declaração poderia especificar uma função retornar um ponteiro para uma longo valor.
A função work chama a função selecionada a partir de dentro do para loop usando a seguinte chamada de função:
( *function )( i );
Um argumento, i, é passado para a função chamada.