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.
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