main函数可以有默认的参数值吗?
Can main function have default argument values?
如何将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);
}
也许你可以使用脚本来运行你的程序,这可能是最接近main()默认参数的解决方案。
exec_my_prog.sh:
#!/bin/zsh
call_your_program + very_meny_args
调用./exec_my_prog.sh
将使用"default"参数运行程序。
相关文章:
- 使函数参数默认为周围范围
- 如何将值传递给其参数(默认参数)
- 当“std::make_index_sequence”和“std::index_sequence”用于模板参数默认类型时
- C ,构造器中允许的参考参数默认值
- 哪些规则控制参数默认赋值?
- 错误:上一个规范后给出的参数默认参数
- 是否可以设计一个包含模板参数默认值的类
- 构造函数中参数C++默认值
- 如何设置依赖于其他参数的参数默认值
- C++模板参数默认函数实现
- QInput对话框参数默认值
- g++4.8.2上列表方法参数默认初始化时出错
- 在函数定义中指定参数默认值会导致错误 C2143:语法错误:'='之前缺少')'
- 函数模板:将第一个模板参数默认为第二个
- 模板模板参数默认可以引用其他模板类型的参数
- 参数默认为先例参数的值
- 如何修改一个类,使它只有一个成员函数,所有参数默认
- 内置类型的模板参数默认值
- 是否可以使用构造函数或对象作为其他类方法的参数默认值?
- 模板参数默认为更高版本