c++ - 在 main() 之外处理 argc 和 argv

标签 c++ parsing arguments argv argc

如果我想将用于处理命令行参数的大部分代码保留在 main 之外(为了组织和更易读的代码),最好的方法是什么?

void main(int argc, char* argv[]){
    //lots of code here I would like to move elsewhere
}

最佳答案

要么将它们作为参数传递,要么将它们存储在全局变量中。只要您不从 main 返回并尝试在 atexit 处理程序或全局范围内的对象的析构函数中处理它们,它们仍然存在并且可以从任何范围访问。

例如:

// Passing them as args:
void process_command_line(int argc, char **argv)
{
    // Use argc and argv
    ...
}

int main(int argc, char **argv)
{
    process_command_line(argc, argv);
    ...
}

或者:

// Global variables
int g_argc;
char **g_argv;

void process_command_line()
{
    // Use g_argc and g_argv
    ...
}

int main(int argc, char **argv)
{
    g_argc = argc;
    g_argv = argv;
    process_command_line();
    ...
}

将它们作为参数传递是一个更好的设计,因为它是封装的,如果您愿意,可以让您修改/替换参数,或者轻松地将您的程序转换为库。全局变量更容易,因为如果您有许多不同的函数出于任何原因访问 args,您可以只存储它们一次,而不需要在所有不同的函数之间不断传递它们。

关于c++ - 在 main() 之外处理 argc 和 argv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12862798/

相关文章:

parsing - pest 中的 PEG 解析器匹配三引号内的正则表达式,尝试在 https ://pest. rs/

c - 将一个函数作为参数传递给另一个函数

docker - 覆盖父 Docker 参数

python - 使用 bs4 从 HTML 中提取特定值

r - `predict.lm` 函数中的参数

c++ - 在 OpenCV 中选择某个相机?

c++ - 带 bo​​ost::atomic 的无锁队列——我这样做对吗?

c++ - 常量成员和没有setter的私有(private)成员有什么区别?

c++ - 将返回的指针分配给另一个返回的指针?

parsing - 使用属性语法装饰解析树