考虑以下 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、虚幻引擎等游戏开发教程。http://www.52cxydh.com/