Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengendalikan Koma dengan Betul dalam Makro C/C dengan Berbilang Argumen?

Bagaimanakah Saya Boleh Mengendalikan Koma dengan Betul dalam Makro C/C dengan Berbilang Argumen?

Patricia Arquette
Lepaskan: 2024-12-11 16:19:20
asal
420 orang telah melayarinya

How Can I Handle Commas Correctly in C/C   Macros with Multiple Arguments?

Makro dan Koma dalam C/C

Dalam C/C , makro sering digunakan untuk memudahkan dan menyamaratakan kod. Walau bagaimanapun, apabila makro mengambil berbilang argumen, mungkin sukar untuk mengendalikan koma dengan betul.

Pertimbangkan makro berikut:

#define FOO(type, name) type name
Salin selepas log masuk

Makro ini boleh digunakan untuk mengisytiharkan pembolehubah jenis tertentu , sebagai contoh:

FOO(int, int_var);
Salin selepas log masuk

Walau bagaimanapun, jika jenis mengandungi koma, seperti dalam parameter templat templat, makro gagal. Contohnya:

FOO(std::map<int, int>, map_var); // error: macro "FOO" passed 3 arguments, but takes just 2
Salin selepas log masuk

Untuk menyelesaikan isu ini, satu pilihan ialah memperkenalkan typedef:

typedef std::map<int, int> map_int_int_t;
FOO(map_int_int_t, map_var); // OK
Salin selepas log masuk

Semasa pendekatan ini berfungsi, ia boleh menyusahkan dan memperkenalkan isu keserasian jenis.

Penyelesaian alternatif ialah menggunakan makro COMMA prapemproses:

#define COMMA ,

FOO(std::map<int COMMA int>, map_var);
Salin selepas log masuk

Ini membenarkan koma dimasukkan dalam hujah makro tanpa menyebabkan ralat. Selain itu, ia boleh digunakan untuk menyambung hujah makro ke dalam rentetan:

#include <cstdio>
#include <map>
#include <typeinfo>

#define STRV(...) #__VA_ARGS__
#define COMMA ,
#define FOO(type, bar) bar(STRV(type) \
    " has typeid name \"%s\"", typeid(type).name())

int main()
{
    FOO(std::map<int COMMA int>, std::printf);
}
Salin selepas log masuk

Kod ini mencetak:

std::map<int , int> has typeid name "St3mapIiiSt4lessIiESaISt4pairIKiiEEE"
Salin selepas log masuk

Dengan menggunakan makro COMMA, pembangun boleh mengelakkan typedef dan memastikan koma dikendalikan dengan betul dalam makro.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Koma dengan Betul dalam Makro C/C dengan Berbilang Argumen?. 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