Macros variádicas en C
__VA_ARGS__ reenvía cualquier número de argumentos; así funcionan las macros de logging.
#include <stdio.h>
#define LOG(fmt, ...) \
fprintf(stderr, "[%s:%d] " fmt "\n", __FILE__, __LINE__, ##__VA_ARGS__)
#define TRACE() LOG("reached %s", __func__)
void noisy(int value) {
LOG("starting");
LOG("value is %d", value);
TRACE();
}
Cómo funciona
...en la lista de parámetros captura el resto.__VA_ARGS__se expande a ellos, comas incluidas.- El
##inicial se traga la coma cuando no se pasó nada.
Palabras clave y builtins usados aquí
intvoid
El intento, en números
- Líneas
- 12
- Caracteres a escribir
- 240
- Tokens
- 36
- Ritmo de tres estrellas
- 100 tpm
Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 22 segundos.
Paso 2 de 3 en Manipulación de texto; paso 6 de 12 en Preprocesador y encabezados.