繁体   English   中英

在c中的main内部调用main

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM