Macros com parâmetros variáveis em C
Os parâmetros opcionais oferecem uma maneira conveniente de especificar parâmetros que possuem valores padrão, proporcionando flexibilidade para chamadas de função. Embora C não suporte nativamente parâmetros opcionais em macros, existem técnicas que podem simular esse comportamento.
Uma abordagem envolve o uso de um padrão de macro recursivo. Vejamos um exemplo:
#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)
A macro PRINT_STRING recebe um número variável de argumentos. A macro PRINT_STRING_MACRO_CHOOSER usa uma lista de argumentos duas vezes: uma vez para determinar a macro auxiliar correta (PRINT_STRING_1_ARGS, PRINT_STRING_2_ARGS ou PRINT_STRING_3_ARGS) com base no número de argumentos e novamente para passar os argumentos para a macro auxiliar selecionada.
Veja como usá-lo:
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
Essa abordagem fornece parâmetros opcionais em macros, permitindo que o chamador especifique apenas os parâmetros necessários. No entanto, requer a definição de várias macros auxiliares, que podem se tornar detalhadas para um número maior de parâmetros opcionais.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3