主函数可以有默认参数值吗?

3
我该如何为main函数参数设置默认值,就像用户自定义函数一样?

为什么你需要这样做? - chris
你不能这样做,如果你想要使用特定的值,你可以将它们存储在'main'内部的一些本地变量中,并使用它,就像你使用默认参数一样。 - Abhineet
可能是Default int main arguments in C/C++的重复问题。 - user1585121
这不是与上面问题的重复。那里的 OP 正在询问 argcargv 的使用,而这里的问题是将它们设置为默认值。 - legends2k
3个回答

5

标准没有禁止 main 函数具有默认参数,并且假设你已经成功地使编译器按照你的方式进行了优化,那么就没有任何问题。

#include <iostream>

const char *defaults[] = { "abc", "efg" };

int main(int argc = 2, const char **argv = defaults)
{
    std::cout << argc << std::endl;
}
示例运行没有错误或警告,但是它是无用的;一个徒劳的实验。它几乎总是会输出1
每次调用程序,比如说,没有参数(或者任何数量的参数),argc被设置为1,而argv[0]指向程序名称,所以这样做是没有意义的,即这些变量从来没有保持不变,因此具有默认值几乎没有意义,因为默认值永远不会被使用。
因此,这种事情通常是通过局部变量实现的。就像这样
int main(int argc, char **argv)
{
    int const default_argc = 2;
    char* const default_args[] = { "abc", "efg" };
    if (argc == 1)   // no arguments were passed
    {
       // do things for no arguments

       // usually those variables are set here for a generic flow onwards
       argc = default_argc;
       argv = default_args;
    }
}

1

我认为你想针对以下情况进行两种不同的操作。

  1. 当没有传递参数时
  2. 当传递了参数时

下面是如何实现它。

int main(int argc, char *argv[]) 
{
    if(argc == 1)
    {
        // case #1
    }
    else
    {
        // case #2
    }
}

0

使用 argc 和 argv?它们将从命令行传递参数到您的程序。您无法真正使用默认参数。您必须在调用程序时传递它们,就像这样:

$> ./my_addition "4" "7"



int main(int argc, char *argv[]) 
{
  // argc <=> 'argument count' (=3)
  // argv <=> 'argument vector' (i.e. argv[1] == "4")
  // argv[0] is usually the bin name, here "my_addition"

  for (int i = 0; i < argc; ++i)
    std::cout << argv[i] << std::endl;
  return (0);
}

也许你可以使用一个脚本来运行你的程序,这可能是最接近 main() 的默认参数的解决方案。

exec_my_prog.sh:

#!/bin/zsh
call_your_program + very_meny_args

执行 ./exec_my_prog.sh 命令将使用“默认”参数运行您的程序。


是的,脚本是一种在不重新编译的情况下更改参数值的方法。还有其他方法吗? - Florida
嗯,在我看来不是。至少我不认识它们,也在谷歌上找不到。但是我不是C/C++方面的专家,只是一个学生)) - user1585121

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接