2011-06-28 3 views
2

J'ai écrit une fonction de journalisation simple qui affiche un horodatage et utilise vprintf() pour émuler printf(). Maintenant, mon programme principal lit un fichier de configuration dans un struct configuration. Je prévois de faire en sorte que la fonction de journalisation utilise cette configuration pour déterminer où elle doit se connecter (std {out, err}, syslog, un autre fichier, ...). Alors, quelle serait la meilleure façon de faire savoir à ma fonction de journalisation où elle devrait se connecter? Je pense à faire de mon struct configuration * config une variable globale, déclarée juste avant main() et ayant extern struct configuration * config dans log.h afin que log.c puisse l'utiliser. Mais tout le monde continue à dire que "les variables globales sont mauvaises, ne les utilise pas" alors j'aimerais savoir s'il y a une meilleure façon de le faire.Configuration d'une fonction de journalisation

+0

Je créerais définitivement une variable globale dans le fichier source de ma classe config et je déclarerais extern dans l'en-tête (pas un pointeur vers une instance mais une instance globale). Je n'ai jamais eu de problème avec ça. Vous n'avez qu'à lui donner un nom suffisamment unique pour éviter les collisions puisque vous êtes dans un espace de noms global. – RedX

Répondre

2

Eh bien, la configuration globale doit être globale. Donc, je considérerais cela comme une exception à la règle. Cependant, vous pouvez vouloir exposer le struct comme const dans la plupart des cas. Cela permettrait de préciser quels modules changent l'état global dans le futur. Pour ce faire, utilisez une fonction globale qui expose un pointeur const au lieu d'un extern direct. En fait, vous pouvez également déclarer la configuration struct comme static. Cela éliminerait davantage l'accès inattendu.

0

Si cette configuration de journalisation s'applique (et s'appliquera toujours) à tout moment à l'ensemble du système, alors ce serait l'une des rares fois où une variable globale pourrait être utilisée, à mon avis.

Vous devez déterminer si vous avez besoin de la structure de configuration globale ou de la valeur de configuration de journalisation.

Questions connexes