主函数中的递归
Recursion in the main function
我在主函数中尝试了递归,但是为什么 'i' 变量没有得到更新,它只更新到 i=1 然后保持不变。
下面是代码:-
int main(int i = 0)
{
std::cout << "i value" << i << std::endl;
if (i == 3)
return 0;
std::cout << "hello" << std::endl;
main(i++);
}
参见示例 cppreference/main_function:
The main function has several special properties:
It cannot be used anywhere in the program
a) in particular, it cannot be called recursively
b) its address cannot be taken
[...]
您不能递归调用 main
。你的签名也不正确。正确的签名是:
int main () { body } (1)
int main (int argc, char *argv[]) { body } (2)
/* another implementation-defined form, with int as return type */ (3)
对于 (3),您需要检查您的实现,我不知道允许 int main(int)
的实现(尽管我懒得去检查)。
最后但同样重要的是,foo(i++);
将递增 i
,然后使用 i
的原始值调用 foo
。您可能想要 foo(++i);
或者 foo(i + 1);
.
TL;DR
int my_main(int i=0) {
// put code here
my_main(i + 1);
}
int main() {
my_main();
}
我在主函数中尝试了递归,但是为什么 'i' 变量没有得到更新,它只更新到 i=1 然后保持不变。 下面是代码:-
int main(int i = 0)
{
std::cout << "i value" << i << std::endl;
if (i == 3)
return 0;
std::cout << "hello" << std::endl;
main(i++);
}
参见示例 cppreference/main_function:
The main function has several special properties:
It cannot be used anywhere in the program
a) in particular, it cannot be called recursively
b) its address cannot be taken
[...]
您不能递归调用 main
。你的签名也不正确。正确的签名是:
int main () { body } (1)
int main (int argc, char *argv[]) { body } (2)
/* another implementation-defined form, with int as return type */ (3)
对于 (3),您需要检查您的实现,我不知道允许 int main(int)
的实现(尽管我懒得去检查)。
最后但同样重要的是,foo(i++);
将递增 i
,然后使用 i
的原始值调用 foo
。您可能想要 foo(++i);
或者 foo(i + 1);
.
TL;DR
int my_main(int i=0) {
// put code here
my_main(i + 1);
}
int main() {
my_main();
}