考虑以下 main() 的两个定义。

int main()
{
/* */
return 0;
}

int main(void)
{
/* */
return 0;
}

有什么区别?

在 C++ 中,没有区别,两者都是相同的。

这两个定义也适用于 C,但第二个带有 void 的定义在技术上被认为更好,因为它明确指定 main 只能在没有任何参数的情况下调用。

在 C 中,如果函数签名不指定任何参数,则意味着可以使用任意数量的参数或不使用任何参数调用该函数。例如,尝试编译并运行以下两个 C 程序(记住将文件保存为 .c)。请注意 fun() 的两个签名之间的区别。

// Program 1 (Compiles and runs fine in C, but not in C++)
void fun() { }
int main(void)
{
fun(10, "GfG", "GQ");
return 0;
}

上面的程序编译并运行良好(见​​这个​​​),但下面的程序编译失败(见​​这个​​)

// Program 2 (Fails in compilation in both C and C++)
void fun(void) { }
int main(void)
{
fun(10, "GfG", "GQ");
return 0;
}

与 C 不同,在 C++ 中,上述两个程序都无法编译。在 C++ 中, fun() 和 fun(void) 是相同的。

所以区别在于,在 C 中,可以使用任意数量的参数调用​int main()​,但只能在没有任何参数的情况下调用​int main(void)​。尽管在大多数情况下它没有任何区别,但在 C 中使用“int main(void)”是推荐的做法。

练习:

预测以下​C​程序的输出。

问题 1

#include <stdio.h>
int main()
{
static int i = 5;
if (--i){
printf("%d ", i);
main(10);
}
}

问题2

#include <stdio.h>
int main(void)
{
static int i = 5;
if (--i){
printf("%d ", i);
main(10);
}
}

更多计算机教程可访问以下网站.

快乐学习,从这里开始 - 吾爱程序员吾爱程序员(www.52cxydh.com)提供了计算机专业相关的所有教程,主要包括C、C++、C#、Java、PHP、Python等编程语言教程,操作系统、计算机组成原理、编译原理、数据结构与算法、计算机网络等计算机基础教程,Unity、虚幻引擎等游戏开发教程。C语言中“int main()”和“int main(void)”的区别?_c++http://www.52cxydh.com/