"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo se pueden implementar parámetros opcionales en macros de C++ para personalizar el código?

¿Cómo se pueden implementar parámetros opcionales en macros de C++ para personalizar el código?

Publicado el 2024-12-21
Navegar:453

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

Personalizar parámetros con macros de C

Las macros son un aspecto fundamental de la programación en C, ya que permiten la personalización y flexibilidad del código. Un requisito común es la capacidad de definir parámetros opcionales dentro de las macros.

Parámetros opcionales

Considere el siguiente ejemplo donde tenemos una macro que imprime una cadena:

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

Esta macro acepta un parámetro obligatorio, el mensaje para imprimir. Para hacerlo más versátil, podemos introducir parámetros opcionales para el tamaño de la cadena y el estilo de fuente:

#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 con macros

Para lograr la sobrecarga, usamos un truco para contar los número de argumentos proporcionados a la macro. Luego, seleccionamos la macro auxiliar adecuada según este recuento 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

Ahora podemos usar la macro PRINT_STRING sobrecargada con parámetros opcionales:

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

Por ejemplo, podemos llamar a la macro sin argumentos para imprimir la cadena predeterminada:

PRINT_STRING("Hello, World!");

O especifique el tamaño de la cadena:

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

O tanto el tamaño de cadena como el estilo de fuente:

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

Este enfoque simplifica el manejo de parámetros para el llamador de macros, mejorando la reutilización y versatilidad del código.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3