我读到C++标准禁止递归main(),但是g ++编译以下代码而没有抱怨:
int main()
{
main();
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以澄清这个吗?
C++03 3.6.1.3:函数main不得在程序中使用(3.2)....
我想知道为什么这个规则存在...是否有人知道任何系统/实现,如果使用main,它将是一个问题?
PS 1.我知道该术语的定义used.2.我知道有一些简单的解决方法,比如从main()调用单个MyMain()并使用MyMain()代替.3.问题是关于现实世界的实施,如果不存在限制则会产生问题.谢谢!
#include <iostream>
#include <cstdlib>
int main() {
cout << "!!!Hello World!!!" << endl;
system("pause");
return main();
}
Run Code Online (Sandbox Code Playgroud)
上面的工作,但它硬编码main(),是否有一个神奇的变量来获得当前的运行功能?
可能重复:
主函数可以在C++中调用自身吗?
我发现这个问题非常有趣但有点虚幻.问题6.42 C++如何通过Dietel编程"可以在你的系统上主要调用主程序吗?编写一个包含函数main的程序.包括静态局部变量计数并初始化为1.每次调用main时,后递增并打印计数值编译你的程序.会发生什么?
我编写了如下的程序,但是我在10次之后使递归停止,好像我要保持它运行它将停止在41000左右的值.
我的问题:在c ++中调用递归main函数是如何合法的,如果这个程序被执行到堆栈溢出或内存故障等等.请解释.
#include <iostream>
using namespace std;
int main()
{
static int count = 0;
count++;
if(count <= 10) {
cout << count << endl;
return main(); //call main
}//end if
system("pause");
return 0;//successful completion
}//end main
Run Code Online (Sandbox Code Playgroud)
谢谢
根据这个答案, 使用函数main()是非法的(§3.6.1.3),如果它的名字出现在一个可能被评估的表达式(§3.2)中,则使用一个函数.
假设我有这个代码:
printf( "%p", &main );
Run Code Online (Sandbox Code Playgroud)
其中函数名称main()出现在表达式中&main.
上面的代码是非法的吗?
#include <iostream>
int main(){
std::cout << main << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么在命令行中打印1?
我希望以下简单函数调用调用它的函数,但是函数由多个函数调用,因此它需要识别哪个函数专门调用它然后调用它.
int wrong()
{
std::cout << "WRONG \n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
作为后续行动,这种功能是否会更好地表达为空白?
可能重复:
主函数可以在C++中调用自身吗?
我决定使用CodeBlock IDE通过调用main函数进行一个小测试,这应该是一个非法的行为.
EX:
#include <iostream>
using namespace std;
int main()
{
cout<<"hello"<<endl;
main();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,在代码块中我能够编译这个混乱.有谁知道为什么?
输出:你好
如果我有以下代码:
void bar(){
int x = 1;
foo();
}
void foo(){
while(true);
}
Run Code Online (Sandbox Code Playgroud)
调用when时int x使用的内存会发生什么变化?它被释放了吗?我知道如果函数返回则释放内存,但是在这种情况下函数根本不会返回.bar()foo()
如果我使用这个代码,其中bar调用foo,反过来,调用bar等等,程序最终会耗尽内存,还是新的函数实例会被新代码替换?
void bar(){
int x = 1;
foo();
}
void foo(){
int y = 1;
bar();
}
Run Code Online (Sandbox Code Playgroud)