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
397 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!

sumber:php.cn
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