2011-06-28 141 views
2

我写了一个简单的日志记录功能,显示时间戳并使用​​来模拟printf()。现在,我的主程序正在将配置文件读入struct configuration。我计划使日志记录功能使用此配置来确定它应该登录到的位置(std {out,err},syslog,其他文件,...)。那么,使我的日志记录功能知道它应该登录到哪里的最好方法是什么?我正在考虑将我的struct configuration * config设为全局变量,在main()之前声明,并且在log.h中有extern struct configuration * config,以便log.c可以使用它。但是大家总是说“全局变量不好,不要使用它们”,所以我想知道是否有更好的方法来做到这一点。日志记录功能的配置

+0

我肯定会在我的config类的源文件中创建一个全局变量,并在头文件中声明extern(不是指向实例的指针,而是全局实例)。从来没有这个问题。由于您处于全局命名空间,因此您只需要给它一个足够独特的名称以避免冲突。 – RedX

回答

2

那么,全球配置需要是全球性的。所以,我会认为这是一个例外的规则。但是,在大多数情况下,您可能想要将struct公开为const。这将有助于缩小将来哪些模块正在改变全球状态。

要完成此操作,请使用公开const指针而不是直接extern的全局函数。实际上,您也可以将配置struct声明为static。这将进一步消除意外的访问。

0

如果这个日志记录配置在任何时候都会(并且总是会)适用于整个系统,那么这将是全局变量可以使用的少数几次之一,imho。

你应该考虑你是否需要整个配置结构全局,或只是日志配置值。