我倾向于在使用基于控制台的程序时使用getopt()
或getopt_long
来分析命令行参数。但是,大多数情况下,我最终使用全局变量来存储我可以在所有*.c
文件中使用的配置参数。在C中存储命令行参数的最佳方法
所以我很想知道你使用了什么样的模式,以及什么样的模式更适合全局变量。
我倾向于在使用基于控制台的程序时使用getopt()
或getopt_long
来分析命令行参数。但是,大多数情况下,我最终使用全局变量来存储我可以在所有*.c
文件中使用的配置参数。在C中存储命令行参数的最佳方法
所以我很想知道你使用了什么样的模式,以及什么样的模式更适合全局变量。
我一般定义一个结构:
struct ConfigurationOpts {
int interval;
int fullscreen;
/* ... */
};
而一个指针传递到struct ConfigurationOpts
到其他模块实例:
int main() {
struct ConfigurationOpts conf;
/* ... */
init_submodule1(&conf);
init_submodule2(&conf);
return 0;
}
包封物
把所有的变量,你在结构中全局使用。
保持范围最小 如果只有你是从主要需要调用CMD行参数的功能,然后通过使用命令行选项 的结构如果正在从多个多个地方调用, 然后
HH:声明+定义全局变量,其具有CMD-行选项 main.c中:初始化变量 user1.c:经由HH user2.c参考变量:通过HH参见可变
(未必真的是适用于这种情况。) 只是取消初始化的选项的结构,你正在使用它完成之后。 它可能确实在你的程序路径的中间或可能在最后。 有一个变量,告诉结构是否被初始化,而不是依赖于函数调用的顺序。 (你不信任实习生!:))
Downvoter请发表评论。 – 2013-02-22 04:02:56
我使用单个记录来保存所有系统范围的数据,一个单身模式。访问是通过一个函数将静态指针(或宏)的值返回给单例记录。这种方法允许各种扩展选项,持久性,传统版本兼容性等。我在程序的痛苦体验之后采用了它,这些程序将全系统数据放在分散的全局变量中。
全局变量对此非常好。 – cnicutar 2013-02-22 03:56:01
感谢大家的快速响应。 – 2013-02-22 04:36:37