Condividi tramite


Chiamate di funzione

In chiamata di funzione è un'espressione che passa il controllo e gli argomenti (se presenti) a una funzione e ha il formato seguente:   

espressione (elenco di espressioniscegliere)

dove espressione è un nome di funzione o restituisce un indirizzo della funzione e elenco di espressioni è un elenco di espressioni (separate da virgole.I valori di queste espressioni risultano gli argomenti passati alla funzione.Se la funzione non restituisce un valore, quindi lo si dichiara come funzione che restituisce void.

Se una dichiarazione esistente prima della chiamata di funzione, ma nessuna informazione viene fornita per i parametri, tutti gli argomenti impliciti subiscono semplicemente le conversioni aritmetiche normali.

[!NOTA]

Le espressioni nell'elenco di argomenti della funzione possono essere valutate in qualsiasi ordine, senza argomenti dei cui valori possono essere modificati dagli effetti collaterali da un altro argomento definiti i valori.Il punto della sequenza definito dall'operatore di chiamata di funzione assicura solo che gli effetti collaterali nell'elenco di argomenti vengono valutati prima che il controllo passa alla funzione chiamata.Si noti che l'ordine in cui gli argomenti vengono inseriti nello stack è un altro aspetto importante). vedere punti di sequenza per ulteriori informazioni.

L'unico requisito su qualsiasi chiamata di funzione è che l'espressione prima delle parentesi deve restituire un indirizzo della funzione.Questo significa che una funzione può essere chiamata con qualsiasi espressione puntatore a funzione.

Esempio

In questo esempio sono illustrate le chiamate di funzione chiamate da un oggetto switch istruzione:

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 );
}

In questo esempio, la chiamata di funzione in main,

work( count, lift );

passa una variabile Integer, counte l'indirizzo della funzione lift la funzione work.Si noti che l'indirizzo della funzione viene passato semplicemente fornendo l'identificatore della funzione, poiché un identificatore di funzione restituisce a un'espressione puntatore.per utilizzare un identificatore di funzione in questo modo, la funzione deve essere dichiarata o definita prima che l'identificatore sia utilizzato; in caso contrario, l'identificatore non è riconosciuto.in questo caso, un prototipo per work viene fornito all'inizio di main funzione.

il parametro function in work viene dichiarato come un puntatore a una funzione che accetta uno int argomento e di restituzione tempo valore.Le parentesi attorno al nome di parametro sono necessarie; senza di esse, la dichiarazione specificherebbe una funzione che restituisce un puntatore a un oggetto tempo valore.

la funzione work chiama la funzione selezionata dal per ciclo mediante la chiamata di funzione seguente:

( *function )( i );

un argomento, i, viene passato alla funzione chiamata.

Vedere anche

Concetti

Funzioni C ()