如果我想将大部分用于处理命令行参数的代码保留在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/

10-13 08:34