在c中调用main的main

时间:2016-06-15 15:17:09

标签: c main

我想问为什么我有:

int main() {
    printf( "Hello world") ;
    main ;
}

编译器打印" Hello world", 但是当我有main()而不是main时,它会反复打印" Hello world"。

4 个答案:

答案 0 :(得分:5)

int main() {
    printf( "Hello world") ;
    main ;
}

最后一个语句main ;几乎没有任何意义:它只需要使用函数指示符,将它转换为指向函数的指针,然后将结果抛弃。

int main() {
    printf( "Hello world") ;
    main() ;
}

此代码使用" main-recursion"。函数main()main()内调用。这个递归调用将无限延续,并且当堆栈用完时可能会崩溃,或者它可能会一直停止,直到你通过Ctrl + C停止,或者如果编译器足够聪明,可以将这个尾递归转换为一个简单的循环。

答案 1 :(得分:2)

main();将以递归方式调用该函数(并最终因堆栈溢出而崩溃,除非您的编译器巧妙地优化了递归到循环)。

main是一个表达式,其值等于函数main()地址。这是一个无操作但仍然在语法上有效。

(请注意,在C ++中调用main的行为是 undefined ,但在C中有效。忽略main的返回值也是明确定义的在C:0中假设。)

答案 2 :(得分:1)

这是因为:

main()

是方法调用。您将以递归方式重复调用main函数。这将一直运行,直到调用堆栈溢出。

main

是一个函数指针,所以你在这一行上并没有做太多。打印“Hello World”后,该功能退出。

答案 3 :(得分:0)

main是函数指针,而main()是函数调用。

当您编写main它只是一个语句时,您没有使用它或在任何地方修改它,但main()是函数调用,它将是递归的(在这种情况下是无限的)调用