Макросы с переменными параметрами в C
Необязательные параметры предлагают удобный способ указания параметров, имеющих значения по умолчанию, обеспечивая гибкость при вызове функций. Хотя C изначально не поддерживает необязательные параметры в макросах, существуют методы, которые могут имитировать такое поведение.
Один из подходов предполагает использование рекурсивного шаблона макроса. Давайте рассмотрим пример:
#define PRINT_STRING(message, ...) PRINT_STRING_MACRO_CHOOSER(__VA_ARGS__)(__VA_ARGS__) #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)
Макрос PRINT_STRING принимает переменное количество аргументов. Макрос PRINT_STRING_MACRO_CHOOSER использует список аргументов дважды: один раз для определения правильного вспомогательного макроса (PRINT_STRING_1_ARGS, PRINT_STRING_2_ARGS или PRINT_STRING_3_ARGS) на основе количества аргументов и еще раз для передачи аргументов выбранному вспомогательному макросу.
Вот как использовать it:
PRINT_STRING("Hello, World!"); // Defaults to no size or style PRINT_STRING("Hello, World!", 18); // Specifies only size PRINT_STRING("Hello, World!", 18, bold); // Specifies both size and style
Этот подход предоставляет дополнительные параметры в макросах, позволяя вызывающему объекту указывать только те параметры, которые ему нужны. Однако для этого требуется определить несколько вспомогательных макросов, которые могут стать многословными для большего количества дополнительных параметров.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3