Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Melepasi Argumen Boleh Ubah dari Satu Fungsi ke Fungsi Lain dengan Senarai Hujah Boleh Ubah?

Bagaimanakah Saya Boleh Melepasi Argumen Boleh Ubah dari Satu Fungsi ke Fungsi Lain dengan Senarai Hujah Boleh Ubah?

Mary-Kate Olsen
Lepaskan: 2024-12-08 15:05:11
asal
353 orang telah melayarinya

How Can I Pass Variable Arguments from One Function to Another with Variable Argument Lists?

Melalukan Argumen Pembolehubah ke Fungsi dengan Senarai Argumen Pembolehubah

Apabila bekerja dengan fungsi yang menggunakan senarai argumen pembolehubah, cabaran untuk menghantar argumen dari satu fungsi ke fungsi lain yang menerima senarai serupa boleh timbul.

Pertimbangkan perkara berikut contoh:

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

Di sini, contoh memanggil contohB. Soalan utama ialah bagaimana untuk menghantar pembolehubah daripada senarai argumen pembolehubah dalam contoh kepada exampleB tanpa mengubah suai exampleB (yang mungkin digunakan dalam konteks lain).

Laluan Terus Tidak Mungkin

Malangnya, teruskan menghantar argumen berubah antara fungsi tidak mungkin. Penyelesaian tersuai diperlukan untuk mencapai ini.

Menggunakan Fungsi Pembantu va_list

Untuk merapatkan jurang ini, kami boleh memperkenalkan fungsi pembantu yang menerima va_list sebagai hujah:

#include <stdarg.h>

static void exampleV(int b, va_list args);
Salin selepas log masuk

exampleA (dinamakan semula untuk konsistensi) diubah suai untuk menggunakan pembantu ini fungsi:

void exampleA(int a, int b, ...)
{
    va_list args;
    do_something(a);                // Use argument a somehow
    va_start(args, b);
    exampleV(b, args);
    va_end(args);
}
Salin selepas log masuk

exampleB juga boleh menggunakan fungsi pembantu yang sama tanpa sebarang pengubahsuaian:

void exampleB(int b, ...)
{
    va_list args;
    va_start(args, b);
    exampleV(b, args);
    va_end(args);
}
Salin selepas log masuk

Dalam contohV, operasi sebenar yang dimaksudkan untuk dilakukan dalam exampleB boleh dilaksanakan, tanpa memerlukan va_start atau va_end.

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

Dengan menggunakan pendekatan ini, kita boleh menghantar argumen pembolehubah secara berkesan dari satu fungsi ke fungsi lain, tanpa mengubah pelaksanaan asal fungsi kedua.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melepasi Argumen Boleh Ubah dari Satu Fungsi ke Fungsi Lain dengan Senarai Hujah Boleh Ubah?. 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