Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah anda boleh melaksanakan parameter pilihan dalam makro C, dan apakah batasan pendekatan ini?

Bagaimanakah anda boleh melaksanakan parameter pilihan dalam makro C, dan apakah batasan pendekatan ini?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-14 15:14:02374semak imbas

How can you implement optional parameters in C   macros, and what are the limitations of this approach?

Parameter Pilihan dengan Makro dalam C

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.

Mentakrifkan Parameter Pilihan

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.

Penggunaan

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

Penghadan

Adalah penting untuk ambil perhatian bahawa pendekatan ini mempunyai beberapa had berbanding dengan terlebih muatan sebenar dalam bahasa berorientasikan objek:

  • Tertib hujah telah ditetapkan. Susunan parameter pilihan tidak boleh diubah .
  • Tidak boleh terlebih muatan berdasarkan jenis hujah. Makro hanya terlebih muatan berdasarkan bilangan argumen, bukan jenisnya.
  • Sukar untuk menggunakan berbilang parameter pilihan . Apabila bilangan parameter pilihan bertambah, takrifan makro boleh menjadi rumit dan sukar untuk dikekalkan.

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!

Kenyataan:
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