Mi programa escribe en un registro y en stdout. Sin embargo, cada mensaje tiene una cierta prioridad y el usuario especifica en Preferencias qué prioridades van a qué flujo (log o stdout).envoltura printf función que se filtra según las preferencias del usuario
unsigned short PRIO_HIGH = 0x0001;
unsigned short PRIO_NORMAL = 0x0002;
unsigned short PRIO_LOW = 0x0003;
Las preferencias es manejado por algunas banderas:
unsigned short PRIO_LOG = (PRIO_HIGH | PRIO_NORMAL);
unsigned short PRIO_STD = (PRIO_HIGH);
La función write_log
debe trabajar con los mismos parámetros que la función printf, con el parámetro adicional de unsigned short priority
.
write_log((PRIO_NORMAL|PRIO_LOW), "HELLO %s, take %d", "World", 1);
(Incluso si PRIO_NORMAL|PRIO_LOW
tiene mucho sentido ...)
Comprobación de las banderas es fácil: if(priority & PRIO_LOG)
(Vuelve> 1 si algún indicador se establece en los dos argumentos)
no puedo encontrar sin embargo cómo voy a pasar la cadena literal y los argumentos de formato a la función printf. ¿Alguien puede ayudarme o darme un puntero (posible a un método alternativo que logra el mismo efecto)? Sería muy apreciado.
En Visual C++ puede usar _____VA_ARGS_____ en su lugar. Referencia: http://msdn.microsoft.com/en-us/library/ms177415(v=vs.110).aspx –
por favor edítelo para mostrar el requerido '#include' –
robisrob