Wrapper-Printf-Funktion, die nach Benutzereinstellungen filtert

Mein Programm schreibt in ein Protokoll und auf stdout. Jede Nachricht hat jedoch eine bestimmte Priorität und der Benutzer gibt in den Einstellungen an, welche Prioritäten für welchen Stream gelten (Protokoll oder Standardausgabe).

unsigned short PRIO_HIGH = 0x0001;
unsigned short PRIO_NORMAL = 0x0002;
unsigned short PRIO_LOW = 0x0004;

Die Einstellungen werden von einigen Flags übernommen:

unsigned short PRIO_LOG = (PRIO_HIGH | PRIO_NORMAL);
unsigned short PRIO_STD = (PRIO_HIGH);

Daswrite_log Die Funktion sollte mit den gleichen Parametern arbeiten wie die Funktion printf, mit dem hinzugefügten Parameter vonunsigned short priority.

write_log((PRIO_NORMAL|PRIO_LOW), "HELLO %s, take %d", "World", 1);

(Selbst wennPRIO_NORMAL|PRIO_LOW macht wenig Sinn ...)

Das Überprüfen der Flags ist ganz einfach:if(priority & PRIO_LOG) (Gibt> 1 zurück, wenn in beiden Argumenten ein Flag gesetzt ist.)

Ich kann jedoch nicht herausfinden, wie ich vorgehen würde, um das String-Literal zu übergebenund die Formatargumente für die Funktion printf. Kann mir jemand helfen oder einen Hinweis geben (möglich auf eine alternative Methode, die den gleichen Effekt erzielt)? Es wäre sehr dankbar.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage