Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Panggilan fungsi adalah ekspresi yang meneruskan kontrol dan argumen (jika ada) ke fungsi dan memiliki formulasi:
ekspresi (expression-listopt)
di sini ekspresi adalah nama fungsi atau mengevaluasi ke alamat fungsi dan expression-list adalah daftar ekspresi (yang dipisahkan oleh koma). Nilai dari ekspresi yang disebutkan belakangan ini adalah argumen yang diteruskan ke fungsi. Jika fungsi tidak mengembalikan nilai, maka Anda mendeklarasikannya menjadi fungsi yang mengembalikan void.
Jika deklarasi tersedia sebelum panggilan fungsi, tetapi tidak ada informasi yang diberikan mengenai parameter, argumen yang tidak dideklarasikan hanya menjalani konversi aritmetika biasa.
Catatan
Ekspresi dalam daftar argumen fungsi dapat dievaluasi dalam urutan apa pun, sehingga argumen yang nilainya dapat diubah dengan efek samping dari argumen lain memiliki nilai yang tidak ditentukan. Titik urutan yang ditentukan oleh operator panggilan-fungsi hanya menjamin bahwa semua efek samping dalam daftar argumen dievaluasi sebelum kontrol diteruskan ke fungsi yang dipanggil. (Perhatikan bahwa urutan tempat argumen didorong pada tumpukan adalah perkara terpisah.) Lihat Titik Urutan untuk informasi selengkapnya.
Satu-satunya persyaratan dalam panggilan fungsi apa pun adalah bahwa ekspresi sebelum tanda kurung harus dievaluasi ke alamat fungsi. Artinya, fungsi dapat dipanggil melalui ekspresi pointer fungsi apa pun.
Contoh
Contoh ini mengilustrasikan panggilan fungsi yang dipanggil dari pernyataan 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 );
}
Dalam contoh ini, panggilan fungsi di main,
work( count, lift );
meneruskan variabel bilangan bulat, count, dan alamat fungsi lift ke fungsi work. Perhatikan bahwa alamat fungsi diteruskan hanya dengan memberikan pengidentifikasi fungsi, karena pengidentifikasi fungsi mengevaluasi ke ekspresi pointer. Untuk menggunakan pengidentifikasi fungsi dengan cara ini, fungsi harus dideklarasikan atau ditentukan sebelum pengidentifikasi digunakan; jika tidak, pengidentifikasi tidak dikenali. Dalam hal ini, prototipe untuk work diberikan di awal fungsi main.
Parameter function di work dinyatakan sebagai pointer ke fungsi yang mengambil satu argumen int dan mengembalikan nilai long. Tanda kurung di sekitar nama parameter diperlukan; tanpanya, deklarasi akan menentukan fungsi yang mengembalikan pointer ke nilai long.
Fungsi work memanggil fungsi yang dipilih dari dalam pengulangan for dengan menggunakan panggilan fungsi berikut:
( *function )( i );
Satu argumen, i, diteruskan ke fungsi yang dipanggil.