我该如何为
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
被设置为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;
}
}
我认为你想针对以下情况进行两种不同的操作。
下面是如何实现它。
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);
}
exec_my_prog.sh:
#!/bin/zsh
call_your_program + very_meny_args
执行 ./exec_my_prog.sh
命令将使用“默认”参数运行您的程序。
argc
和argv
的使用,而这里的问题是将它们设置为默认值。 - legends2k