[英]Calling main inside of main in c
我想问为什么在什么时候:
int main() {
printf( "Hello world") ;
main ;
}
编译器将打印“ Hello world”,但是当我使用main()而不是main时,它将重复打印“ Hello world”。
int main() {
printf( "Hello world") ;
main ;
}
最后的陈述main ;
实际上没有任何意义:仅使用函数指示符,将其转换为指向函数的指针,然后将结果丢弃。
int main() {
printf( "Hello world") ;
main() ;
}
此代码使用“ main-递归”。 函数main()
在main()
内部被调用。 该递归调用将无限继续,并且在堆栈用完时可能会崩溃,或者可能直到您按Ctrl + C停止为止,或者如果编译器足够聪明,可以将此尾递归转换为简单循环,则此调用将终止。
main();
将以递归方式调用该函数(最终会由于堆栈溢出而崩溃,除非编译器巧妙地将递归优化为循环)。
main
是一个表达式 ,其值等于函数main()
的地址 。 这是没有操作的,但是在语法上仍然有效。
(请注意,从自身调用main
的行为在C ++中未定义 ,但在C中有效。从main
省略返回值在C:0中也已定义好)。
这是因为:
main()
是一个方法调用。 您正在递归地反复调用main函数。 这将一直运行到调用堆栈溢出为止。
main
是一个函数指针,因此您实际上并没有做太多事情。 一次打印“ Hello World”后,该功能退出。
main
是函数指针,而main()
是函数调用。
当您编写main
它只是一个语句 ,您没有在任何地方使用它或对其进行修改,但是main()是函数调用,它将是递归的(在这种情况下为无限)调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.