"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 puedo simular parámetros opcionales en macros de C++?

¿Cómo puedo simular parámetros opcionales en macros de C++?

Publicado el 2024-11-15
Navegar:986

How Can I Simulate Optional Parameters in C   Macros?

Macros con parámetros variables en C

Los parámetros opcionales ofrecen una manera conveniente de especificar parámetros que tienen valores predeterminados, lo que proporciona flexibilidad para las llamadas a funciones. Si bien C no admite de forma nativa parámetros opcionales en macros, existen técnicas que pueden simular este comportamiento.

Un enfoque implica el uso de un patrón de macro recursivo. Tomemos un ejemplo:

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

La macro PRINT_STRING toma un número variable de argumentos. La macro PRINT_STRING_MACRO_CHOOSER utiliza una lista de argumentos dos veces: una para determinar la macro auxiliar correcta (PRINT_STRING_1_ARGS, PRINT_STRING_2_ARGS o PRINT_STRING_3_ARGS) en función del número de argumentos y otra vez para pasar los argumentos a la macro auxiliar seleccionada.

Aquí se explica cómo usarlo:

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

Este enfoque proporciona parámetros opcionales en macros, lo que permite a la persona que llama especificar solo los parámetros que necesita. Sin embargo, requiere definir múltiples macros auxiliares, que pueden volverse detalladas para una mayor cantidad de parámetros opcionales.

Ú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