考虑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);
}
}
答案:
4 3 2 1
问题2:
#include <stdio.h>
int main(void)
{
static int i = 5;
if (--i){
printf("%d ", i);
main(10);
}
}
答案:
编译报错
参考文档
[1]GeeksforGeeks.Difference between “int main()” and “int main(void)” in C/C++?[EB/OL].https://www.geeksforgeeks.org/difference-int-main-int-mainvoid/,2018-09-07.