C/C++中“int main()”和“int main(void)”的区别?

请考虑以下两个对MIN()的定义。

null

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++中,Fund()和Fund(Valuy)都是相同的。

所以区别在于,在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);
}
}


如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享