Mon programme écrit dans un journal et dans stdout. Chaque message, cependant, a une certaine priorité et l'utilisateur spécifie dans les préférences quelles priorités vont à quel flux (log ou stdout).Fonction wrapper printf qui filtre selon les préférences de l'utilisateur
unsigned short PRIO_HIGH = 0x0001;
unsigned short PRIO_NORMAL = 0x0002;
unsigned short PRIO_LOW = 0x0003;
Les préférences sont gérées par des drapeaux:
unsigned short PRIO_LOG = (PRIO_HIGH | PRIO_NORMAL);
unsigned short PRIO_STD = (PRIO_HIGH);
La fonction write_log
devrait fonctionner avec les mêmes paramètres que la fonction printf, avec le paramètre supplémentaire de unsigned short priority
.
write_log((PRIO_NORMAL|PRIO_LOW), "HELLO %s, take %d", "World", 1);
(Même si PRIO_NORMAL|PRIO_LOW
peu de sens ...)
Vérification des drapeaux est facile: if(priority & PRIO_LOG)
(Retours> 1 si un indicateur est défini dans les deux arguments)
je ne peux cependant trouver comment je vais passer le littéral chaîne et les arguments de format à la fonction printf. Quelqu'un peut-il m'aider ou me donner un pointeur (possible à une méthode alternative qui réalise le même effet)? Cela serait très appréciable.
En Visual C++, vous pouvez utiliser _____VA_ARGS_____ à la place. Référence: http://msdn.microsoft.com/en-us/library/ms177415(v=vs.110).aspx –
s'il vous plaît modifier pour afficher requis '#include' –
robisrob