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

时间:2013-02-22 03:50:38

标签: c global-variables command-line-arguments

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

所以我很想知道你使用什么模式,以及什么是更好的全局变量替代方案。

3 个答案:

答案 0 :(得分:3)

我通常定义一个结构:

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

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

int main() {
    struct ConfigurationOpts conf;

    /* ... */

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

    return 0;
}

答案 1 :(得分:0)

  1. 包封物

    将您使用的全部变量全局放入结构中。

  2. 保持范围最小化 如果只有您从main调用的函数需要cmd-line参数,那么使用命令行选项传递struct 如果从多个地方调用它, 然后

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

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

答案 2 :(得分:0)

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