Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menentukan Bilangan Argumen dalam Makro Variadik C?

Bagaimanakah Saya Boleh Menentukan Bilangan Argumen dalam Makro Variadik C?

Linda Hamilton
Lepaskan: 2024-12-25 14:48:14
asal
229 orang telah melayarinya

How Can I Determine the Number of Arguments in a C   Variadic Macro?

Menentukan Bilangan Argumen dalam Variadic Macro Menggunakan C Prapemproses VA_ARGS

Makro variadic dalam C membenarkan penggunaan bilangan hujah yang sewenang-wenangnya. Walau bagaimanapun, menentukan bilangan hujah yang dihantar kepada makro variadic boleh menjadi mencabar. Artikel ini meneroka penyelesaian yang mudah dan cekap menggunakan VA_ARGS makro prapemproses.

Pemahaman VA_ARGS

VA_ARGS ialah makro prapemproses terbina dalam yang berkembang kepada yang sebenar hujah diserahkan kepada makro variadic. Walau bagaimanapun, ia tidak memberikan sebarang maklumat tentang bilangan argumen.

Mengira Argumen Menggunakan Saiz Tatasusunan Integer

Untuk menentukan bilangan argumen dalam makro variadic, kami boleh mengeksploitasi tingkah laku saiz tatasusunan dalam prapemproses C. Makro berikut, NUMARGS(), menggunakan teknik ini:

#define NUMARGS(...) (sizeof((int[]){__VA_ARGS__})/sizeof(int))
Salin selepas log masuk

Makro ini mengembang kepada saiz tatasusunan yang mengandungi semua argumen yang dihantar kepadanya, dibahagikan dengan saiz integer. Nilai yang terhasil ialah bilangan argumen.

Contoh Penggunaan

Pertimbangkan makro berikut, SUM(), yang mengira jumlah argumennya:

#define SUM(...) (sum(NUMARGS(__VA_ARGS__), __VA_ARGS__))
Salin selepas log masuk

Untuk menggunakan SUM(), kami akan memanggilnya dengan nombor pembolehubah argumen, seperti jadi:

SUM(1);
SUM(1, 2);
SUM(1, 2, 3);
Salin selepas log masuk

Makro NUMARGS() akan mengira bilangan argumen dan menyampaikannya bersama-sama dengan argumen kepada fungsi sum().

Mengendalikan Senarai Argumen Kosong

Secara lalai, makro NUMARGS() akan gagal jika dipanggil dengan senarai argumen kosong. Untuk menangani perkara ini, varian makro boleh ditakrifkan menggunakan sambungan GNU C:

#define NUMARGS(...) (sizeof((int[]){0, ##__VA_ARGS__})/sizeof(int)-1)
Salin selepas log masuk

Varian ini membenarkan senarai argumen kosong dan mengira bilangan argumen dalam semua kes dengan betul.

Kesimpulan

Makro prapemproses VA_ARGS boleh dimanfaatkan untuk mengira bilangan argumen dalam makro variadic dengan cekap. Dengan menggabungkan teknik ini dengan manipulasi saiz tatasusunan integer, kami boleh membangunkan makro yang berguna untuk mengendalikan nombor pembolehubah argumen dalam C .

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Bilangan Argumen dalam Makro Variadik C?. 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