Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Una llamada de función es una expresión que pasa el control y argumentos (si existe) a una función y tiene el formato:
expresión (expresión-listaopt)
donde es un nombre de función o evalúa expresión una dirección y a expresión-lista de función es una lista de expresiones (separados por comas).los valores de estas últimas expresiones son los argumentos pasados a la función.Si la función no devuelve un valor, después se declara como una función que devuelve void.
Si una declaración existe antes de la llamada de función, pero no se proporciona ninguna información sobre los parámetros, los argumentos sin declarar experimenta simplemente conversiones aritméticas usuales.
[!NOTA]
Las expresiones de la lista de argumentos de función se pueden evaluar en cualquier orden, por lo que los argumentos cuyos valores se pueden cambiar por efectos secundarios de otro argumento tienen valores no definidos.El punto de secuencia definido por el operador de llamada de función sólo garantiza que todos los efectos secundarios en la lista de argumentos se evalúen antes de que el control pasa a la función llamada.(Observe que el orden de inserción en la que los argumentos se empujan en la pila es una cuestión independiente). Vea puntos de secuencia para obtener más información.
El único requisito de cualquier llamada de función es que la expresión antes de paréntesis debe evaluar una dirección de función.Esto significa que una función se puede llamar con cualquier expresión de puntero a función.
Ejemplo
Este ejemplo muestra las llamadas de función con nombre de una instrucción de switch :
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 );
}
en este ejemplo, la llamada de función en main,
work( count, lift );
pasa una variable integer, count, y la dirección de la función lift a la función work.Observe que lo pasa la dirección de función simplemente el identificador de función, ya que un identificador de función se evalúa como una expresión de puntero.Para utilizar un identificador de función de esta manera, la función debe declararse o definido antes de utilizar el identificador; si no, el controlador no se reconoce.En este caso, un prototipo para work se da al principio de la función de main .
El parámetro function en work se declara como puntero a una función que toma un argumento de int y que devuelve un valor de Más .Paréntesis alrededor del nombre de parámetro se requieren; sin ellos, la declaración especificar una función devuelve un puntero a un valor de Más .
La función work llama a la función seleccionada por dentro del bucle de Para mediante la siguiente llamada de función:
( *function )( i );
Un argumento, i, se pasa a la función llamada.