首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中避免读取配置文件的全局变量

在C++中避免读取配置文件的全局变量
EN

Stack Overflow用户
提问于 2014-07-28 22:45:19
回答 5查看 1.2K关注 0票数 3

我的项目是在linux平台下用C语言开发的。我也在使用libxml2。可执行文件由分布在多个c文件中的多个模块组成。

我有一个包含20个可配置参数的配置文件( Xml )。

假设我正在读取模块M1中的配置文件参数。但我需要在其他大模块M2和M3中使用它们。

有没有什么有效的方法可以使可配置参数对所有模块可用,而不需要使用全局变量来读取模块M1中的参数。

具体地说,是否有其他方法/设计可以避免使用全局声明的变量来读取配置参数。

EN

回答 5

Stack Overflow用户

发布于 2014-07-28 22:53:23

首先,如果这些值只被读取一次,并且在那之后就再也没有改变过,那么将它们存储为全局变量并不是什么大问题。

处理此问题的最佳(通用)方法是读取XML,将值转换为其本机类型(将数字作为xml字符串转换为整数),并将其集中存储在一个结构中。只会有一个结构的实例化,但不要强调它是一个“单例”。该结构可以是全局可访问的,也可以将指向它的指针传递给不同的模块。

票数 2
EN

Stack Overflow用户

发布于 2014-07-28 22:56:47

在这种情况下,我确实会使用全局变量,您的变量似乎确实被所有模块全局使用。但是,为了减轻全局名称空间污染,您需要将这些变量放入一个结构中。

创建一个名为ConfigGlobals或其他描述性名称的结构,并简单地为每个配置选项向其中添加成员。这增加了清晰度,因为您可以一目了然地知道哪些变量是配置的,这意味着您只需要将一个名称放入全局作用域。

编辑:注意:我看到这个答案与James Curran的答案相似,很抱歉,复制完全是巧合,我不是故意复制你的,我在你发帖之前就开始写这篇文章了。

票数 2
EN

Stack Overflow用户

发布于 2014-07-28 23:02:45

解决这个问题的更好方法是: 1-将所有配置变量放在一个结构中2-为该结构创建一个静态变量(因此作用域只在该文件中) 3-使用getter和setter读取和写入参数

通过这样做,如果明天你的应用程序是多线程的,那么你可以在Setter和getter中通过互斥来保护你的参数。通过这种方式,它将是一种更干净的访问方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24997828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档