Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Meluluskan Argumen Pembolehubah Antara Fungsi C dengan Senarai Argumen Pembolehubah?

Bagaimana untuk Meluluskan Argumen Pembolehubah Antara Fungsi C dengan Senarai Argumen Pembolehubah?

Mary-Kate Olsen
Lepaskan: 2024-12-12 12:32:13
asal
481 orang telah melayarinya

How to Pass Variable Arguments Between C Functions with Variable Argument Lists?

Cara Melepasi Argumen Pembolehubah antara Fungsi dengan Senarai Argumen Pembolehubah

Masalah:

Anda mempunyai dua fungsi, contoh( ) dan exampleB(), dengan senarai hujah pembolehubah yang serupa:

void example(int a, int b, ...);
void exampleB(int b, ...);
Salin selepas log masuk

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...
}
Salin selepas log masuk

Dalam persediaan ini:

  • exampleV() ialah fungsi pembantu yang mengambil argumen va_list.
  • do_something(a) ialah contoh menggunakan argumen dalam exampleA().
  • exampleV() dipanggil daripada kedua-duanya exampleA() dan exampleB() dengan senarai argumen pembolehubah yang sepadan.
  • exampleV() melaksanakan operasi yang asalnya dimaksudkan untuk exampleB() tetapi tidak memanggil va_start() atau va_end().

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan