«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как реализовать необязательные параметры в макросах C++ для настройки кода?

Как реализовать необязательные параметры в макросах C++ для настройки кода?

Опубликовано 21 декабря 2024 г.
Просматривать:157

How can you implement optional parameters in C   macros for code customization?

Настройка параметров с помощью макросов C

Макросы — это фундаментальный аспект программирования на C, обеспечивающий настройку кода и гибкость. Одним из общих требований является возможность определять необязательные параметры в макросах.

Необязательные параметры

Рассмотрим следующий пример, в котором у нас есть макрос, который печатает строку:

#define PRINT_STRING(message) PrintString(message, 0, 0)

Этот макрос принимает один обязательный параметр — сообщение для печати. Чтобы сделать его более универсальным, мы можем ввести дополнительные параметры для размера строки и стиля шрифта:

#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)

Перегрузка макросами

Чтобы добиться перегрузки, мы используем трюк для подсчета количество аргументов, передаваемых макросу. Затем мы выбираем соответствующий вспомогательный макрос на основе этого количества аргументов:

#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, )

Использование

Теперь мы можем использовать перегруженный макрос PRINT_STRING с дополнительными параметрами:

#define PRINT_STRING(...) PRINT_STRING_MACRO_CHOOSER(__VA_ARGS__)(__VA_ARGS__)

Например, мы можем вызвать макрос без аргументов для печати строки по умолчанию:

PRINT_STRING("Hello, World!");

Или укажите строку size:

PRINT_STRING("Hello, World!", 18);

Или размер строки и стиль шрифта:

PRINT_STRING("Hello, World!", 18, bold);

Этот подход упрощает обработку параметров для вызывающего макроса, улучшая возможность повторного использования кода и универсальность.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3