Aracılığıyla paylaş


işlev Çağrıları

İşlev çağrısı , denetim ve bağımsız değişkenleri (varsa) işleve geçiren ve şu forma sahip bir ifadedir:

ifade (ifade-listetercihi)

burada ifade bir işlev adıdır veya bir işlev adresi olarak değerlendirilir ve ifade-listesi ifadelerin listesidir (virgülle ayrılmıştır). Bu ikinci ifadelerin değerleri, işleve geçirilen bağımsız değişkenlerdir. İşlev bir değer döndürmezse, değerini döndüren voidbir işlev olarak bildirirsiniz.

İşlev çağrısından önce bir bildirim varsa, ancak parametrelerle ilgili hiçbir bilgi verilmezse, bildirilmeyen bağımsız değişkenler normal aritmetik dönüştürmelerden geçer.

Not

İşlev bağımsız değişkeni listesindeki ifadeler herhangi bir sırada değerlendirilebilir, bu nedenle değerleri başka bir bağımsız değişkenden yan etkilerle değiştirilebilen bağımsız değişkenlerin tanımsız değerleri olur. İşlev çağrısı işleci tarafından tanımlanan sıra noktası, denetim çağrılan işleve geçmeden önce yalnızca bağımsız değişken listesindeki tüm yan etkilerin değerlendirilmesini garanti eder. (Bağımsız değişkenlerin yığına gönderilme sırasının ayrı bir konu olduğuna dikkat edin.) Daha fazla bilgi için bkz . Sıra Noktaları .

Herhangi bir işlev çağrısındaki tek gereksinim, parantezlerden önceki ifadenin bir işlev adresi olarak değerlendirmesi gerektiğidir. Bu, bir işlevin herhangi bir işlev işaretçisi ifadesi aracılığıyla çağrılabileceği anlamına gelir.

Örnek

Bu örnek, bir switch deyimden çağrılan işlev çağrılarını gösterir:

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

Bu örnekte işlevi içinde çağrısında bulunur main.

work( count, lift );

işlevine countbir tamsayı değişkeni ve işlevinin liftworkadresini geçirir. İşlev tanımlayıcısı işaretçi ifadesi olarak değerlendirildiğinden işlev adresinin yalnızca işlev tanımlayıcısı verilerek geçirildiğini unutmayın. İşlev tanımlayıcısını bu şekilde kullanmak için, tanımlayıcı kullanılmadan önce işlevin bildirilmesi veya tanımlanması gerekir; aksi takdirde, tanımlayıcı tanınmaz. Bu durumda, işlevinin başında work için main bir prototip verilir.

içindeki function parametresiwork, bir bağımsız değişken alan int ve değer döndüren bir işlevin işaretçisi long olarak bildirilir. Parametre adının etrafındaki parantezler gereklidir; bunlar olmadan bildirim, bir değere işaretçi döndüren bir long işlev belirtir.

İşlev work , aşağıdaki işlev çağrısını kullanarak seçili işlevi döngünün for içinden çağırır:

( *function )( i );

bağımsız değişkenlerinden biri, iadlı işleve geçirilir.

Ayrıca bkz.

İşlevler