在C中存储命令行参数的最佳方法

在使用基于控制台的程序时,我倾向于使用getopt()getopt_long来分析命令行参数。 但是,大多数情况下,我最终使用全局变量来存储我可以在所有*.c文件中使用的配置参数。

所以我很想知道你使用了什么样的模式,以及什么样的模式更适合全局变量。


我通常定义一个结构:

struct ConfigurationOpts {
    int interval;
    int fullscreen;
    /* ... */
};

并将一个指向struct ConfigurationOpts的实例的指针传递给其他模块:

int main() {
    struct ConfigurationOpts conf;

    /* ... */

    init_submodule1(&conf);
    init_submodule2(&conf);

    return 0;
}

我使用单个记录来保存所有系统范围的数据,即单例模式。 访问是通过一个函数将静态指针(或宏)的值返回给单例记录。 这种方法允许各种扩展选项,持久性,传统版本兼容性等。我在程序的痛苦体验之后采用了它,这些程序将全系统数据放在分散的全局变量中。


  • 封装

    将全局使用的所有变量放在结构中。

  • 保持最小范围如果只有你从main调用的函数需要cmd-line参数,那么使用命令行选项传递结构如果从多个地方调用它,那么

    hh:声明+定义具有cmd行选项的全局变量main.c:初始化变量user1.c:通过hh user2.c引用变量:通过hh引用变量

  • 保持最小生命周期
  • (在这种情况下可能并不适用)。在完成使用后,只需使用选项对结构进行初始化即可。 它可能确实在你的程序路径的中间,或者可能在最后。 有一个变量,告诉结构是否被初始化,而不是依赖于函数调用的顺序。 (你不相信实习生!:))

    链接地址: http://www.djcxy.com/p/30425.html

    上一篇: Best way to store command line arguments in C

    下一篇: Passing additional variables from command line to make