我编写了一个简单的日志记录函数,它显示时间戳并使用 vprintf()
来模拟 printf()
。现在,我的主程序正在将配置文件读入结构配置
。我计划让日志记录功能使用此配置来确定它应该记录到哪里(std{out,err}、syslog、其他一些文件,...)。那么,让我的日志记录功能知道它应该记录到哪里的最好方法是什么?我正在考虑让我的 struct configuration * config
成为一个全局变量,在 main()
之前声明并在 extern struct configuration * config
中log.h 以便 log.c 可以使用它。但是每个人都在说“全局变量不好,不要使用它们”,所以我想知道是否有更好的方法。
最佳答案
嗯,全局配置需要是全局的。所以,我认为这是规则的异常(exception)。但是,在大多数情况下,您可能希望将 struct
公开为 const
。这将有助于缩小 future 改变全局状态的模块的范围。
要实现这一点,请使用公开const
指针的全局函数而不是直接的extern
。事实上,您也可以将配置 struct
声明为 static
。这将进一步消除意外访问。
关于日志记录功能的配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6508966/