Menguasai Argumen Variabel dalam C: Panduan Praktis
Kadang-kadang, Anda mungkin menghadapi situasi, ketika Anda ingin memiliki fungsi, yang dapat mengambil jumlah argumen yang bervariabel, yaitu parameter, alih-alih jumlah parameter yang telah ditentukan. Bahasa pemrograman C menyediakan solusi untuk situasi ini dan Anda diizinkan untuk mendefinisikan fungsi yang dapat menerima jumlah parameter yang bervariabel berdasarkan kebutuhan Anda. Contoh berikut menunjukkan definisi dari fungsi tersebut.
int func(int, ... ) { . . . } int main() { func(1, 2, 3); func(1, 2, 3, 4); } Perlu diperhatikan bahwa fungsi func() memiliki argumen terakhirnya sebagai ellipsis, yaitu tiga titik (...) dan yang sebelum ellipsis selalu adalah int yang akan mewakili jumlah total argumen variabel yang diteruskan. Untuk menggunakan fungsionalitas ini, Anda perlu menggunakan file header stdarg.h yang menyediakan fungsi dan makro untuk mengimplementasikan fungsionalitas argumen variabel dan mengikuti langkah-langkah berikut −
Definisikan fungsi dengan parameter terakhirnya sebagai ellipsis dan yang sebelum ellipsis selalu adalah int yang akan mewakili jumlah argumen.
Buat variabel tipe va_list dalam definisi fungsi. Tipe ini didefinisikan dalam file header stdarg.h.
Gunakan parameter int dan makro va_start untuk menginisialisasi variabel va_list ke daftar argumen. Makro va_start didefinisikan dalam file header stdarg.h.
Gunakan makro va_arg dan variabel va_list untuk mengakses setiap item dalam daftar argumen.
Gunakan makro va_end untuk membersihkan memori yang dialokasikan untuk variabel va_list.
Sekarang mari kita ikuti langkah-langkah di atas dan tulis fungsi sederhana yang dapat mengambil jumlah parameter yang bervariabel dan mengembalikan rata-ratanya −
Live Demo
#include <stdio.h> #include <stdarg.h> double average(int num,...) { va_list valist; double sum = 0.0; int i; /* inisialisasi valist untuk jumlah argumen */ va_start(valist, num); /* akses semua argumen yang ditugaskan ke valist */ for (i = 0; i < num; i++) { sum += va_arg(valist, int); } /* bersihkan memori yang dialokasikan untuk valist */ va_end(valist); return sum/num; } int main() { printf("Rata-rata dari 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5)); printf("Rata-rata dari 5, 10, 15 = %f\n", average(3, 5,10,15)); } Ketika kode di atas dikompilasi dan dieksekusi, hasilnya adalah sebagai berikut. Perlu diperhatikan bahwa fungsi average() telah dipanggil dua kali dan setiap kali argumen pertama mewakili jumlah total argumen variabel yang diteruskan. Hanya ellipsis yang akan digunakan untuk meneruskan jumlah argumen yang bervariabel.
Rata-rata dari 2, 3, 4, 5 = 3.500000 Rata-rata dari 5, 10, 15 = 10.000000