Dalam C , makro boleh menjadi alat yang berkuasa untuk penggunaan semula dan pengabstrakan kod. Walau bagaimanapun, mereka juga kekurangan beberapa fleksibiliti yang boleh didapati dalam bahasa pengaturcaraan berorientasikan objek tradisional. Satu ciri sedemikian ialah keupayaan untuk mentakrifkan parameter pilihan dalam makro.
Untuk menentukan parameter pilihan dalam makro, anda boleh menggunakan gabungan senarai argumen dan helah prapemproses. Satu pendekatan biasa ialah menggunakan makro dalam makro untuk menyediakan kefungsian lebihan. Contohnya:
#define PRINT_STRING_1_ARGS(message) PrintString(message, 0, 0) #define PRINT_STRING_2_ARGS(message, size) PrintString(message, size, 0) #define PRINT_STRING_3_ARGS(message, size, style) PrintString(message, size, style)
Di sini, tiga makro (PRINT_STRING_1_ARGS, PRINT_STRING_2_ARGS dan PRINT_STRING_3_ARGS) ditakrifkan, setiap satu dengan bilangan parameter yang berbeza. Untuk memilih makro yang betul berdasarkan bilangan parameter yang diluluskan, helah prapemproses digunakan:
#define GET_4TH_ARG(arg1, arg2, arg3, arg4, ...) arg4 #define PRINT_STRING_MACRO_CHOOSER(...) \ GET_4TH_ARG(__VA_ARGS__, PRINT_STRING_3_ARGS, \ PRINT_STRING_2_ARGS, PRINT_STRING_1_ARGS, ) #define PRINT_STRING(...) PRINT_STRING_MACRO_CHOOSER(__VA_ARGS__)(__VA_ARGS__)
Makro GET_4TH_ARG mengekstrak argumen keempat daripada senarai argumen pembolehubah (__VA_ARGS__), yang dalam kes ini mewakili makro yang dikehendaki dipanggil.
Untuk menggunakan mekanisme parameter pilihan, anda boleh menggunakan makro PRINT_STRING seperti berikut:
PRINT_STRING("Hello, World!"); // Call with 1 argument PRINT_STRING("Hello, World!", 18); // Call with 2 arguments PRINT_STRING("Hello, World!", 18, bold); // Call with 3 arguments
Adalah penting untuk ambil perhatian bahawa pendekatan ini mempunyai beberapa had berbanding dengan terlebih muatan sebenar dalam bahasa berorientasikan objek:
Atas ialah kandungan terperinci Bagaimanakah anda boleh melaksanakan parameter pilihan dalam makro C, dan apakah batasan pendekatan ini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!