main函数可以有默认的参数值吗?

Can main function have default argument values?

本文关键字:参数 默认 函数 main      更新时间:2023-10-16

如何将main函数参数的默认值设置为用户定义的函数?

标准没有规定禁止main使用默认参数,并说你已经成功地将编译器合并成这样

#include <iostream>
const char *defaults[] = { "abc", "efg" };
int main(int argc = 2, const char **argv = defaults)
{
    std::cout << argc << std::endl;
}

生活的例子。它编译时没有错误或警告,但仍然是无用的;一个徒劳的实验。它几乎总是打印1

每次调用程序时,例如,没有参数(或任何数量的参数),argc被设置为1argv[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. 当没有传递参数时
  2. 参数传递时。

你应该这样做。

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

使用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将使用"default"参数运行程序。