Masalah:
Anda mempunyai dua fungsi, contoh( ) dan exampleB(), dengan senarai hujah pembolehubah yang serupa:
void example(int a, int b, ...); void exampleB(int b, ...);
Anda perlukan untuk memanggil example() dari dalam exampleB() tanpa mengubah suai senarai hujah pembolehubah yang terakhir, kerana ia digunakan di tempat lain.
Penyelesaian:
Malangnya, tiada langsung kaedah untuk menghantar argumen pembolehubah dalam C. Untuk mencapai ini, anda mesti menentukan fungsi pembantu yang mengambil parameter va_list. Berikut ialah contoh:
#include <stdarg.h> static void exampleV(int b, va_list args); void exampleA(int a, int b, ...) // Renamed for consistency { va_list args; do_something(a); // Use argument a somehow va_start(args, b); exampleV(b, args); va_end(args); } void exampleB(int b, ...) { va_list args; va_start(args, b); exampleV(b, args); va_end(args); } static void exampleV(int b, va_list args) { ...whatever you planned to have exampleB do... ...except it calls neither va_start nor va_end... }
Dalam persediaan ini:
Dengan menambahkan exampleV() sebagai perantara, anda boleh menghantar argumen pembolehubah kepada exampleB() tanpa mengubah suai pelaksanaan asalnya.
Atas ialah kandungan terperinci Bagaimana untuk Meluluskan Argumen Pembolehubah Antara Fungsi C dengan Senarai Argumen Pembolehubah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!