"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como você pode implementar parâmetros opcionais em macros C++ para personalização de código?

Como você pode implementar parâmetros opcionais em macros C++ para personalização de código?

Publicado em 2024-12-21
Navegar:519

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

Personalizando parâmetros com macros C

As macros são um aspecto fundamental da programação C, permitindo personalização e flexibilidade do código. Um requisito comum é a capacidade de definir parâmetros opcionais dentro de macros.

Parâmetros opcionais

Considere o exemplo a seguir, onde temos uma macro que imprime uma string:

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

Esta macro aceita um parâmetro obrigatório, a mensagem para imprimir. Para torná-lo mais versátil, podemos introduzir parâmetros opcionais para o tamanho da string e estilo da fonte:

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

Sobrecarga com macros

Para conseguir a sobrecarga, usamos um truque para contar o número de argumentos fornecidos à macro. Em seguida, selecionamos a macro auxiliar apropriada com base nesta contagem de argumentos:

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

Uso

Agora podemos usar a macro PRINT_STRING sobrecarregada com parâmetros opcionais:

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

Por exemplo, podemos chamar a macro sem argumentos para imprimir a string padrão:

PRINT_STRING("Hello, World!");

Ou especifique o tamanho da string:

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

Ou o tamanho da string e o estilo da fonte:

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

Essa abordagem simplifica o tratamento de parâmetros para o chamador da macro, melhorando a reutilização e versatilidade do código.

Tutorial mais recente Mais>

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