int main(void)才是正确写法

在编写C/C++程序入口函数main的时候,很多程序员,特别是一些具有C基础的C++程序员时经常会写出如下格式的main函数:
void main()
{
// some code …
}

上述代码在VC++中是可以正确编译、链接、执行的。

但是当你将代码放在Linux环境下,采用GCC编译器进行编译时,你会吃惊地发现编译器抛出了如下的错误信息:
main.cpp:2: 错误 :’::main’ 必须返回’int’

为什么同样的代码会出现两种不同的结果呢?这还是跨平台的C/C++语言吗?不要对C/C++的跨平台性产生质疑,之所以会这样,很大程度上要归结于市面上一些书的“误导”,以及微软对VC++编译器main返回值问题的过分纵容。

在C和C++中,不接收任何参数也不返回任何信息的函数原型为“void 函数名(void);”。所以很多人认为,不需要程序返回值时可以把main函数定义成void main(void),然而这种想法是非常错误的!

有一点你必须明确:在C/C++标准中从来没有定义过void main()这样的代码形式。C++之父BjarneStroustrup在他的主页FAQ中明确地写着这样一句话:在C++中绝对没有出现过voidmain(){//}这样的函数定义,在C语言中也是。main函数的返回值应该定义为int类型,在C和C++标准中都是这样规定的。

最后,还得说明一下C++标准中一个“好坏难定”的规定:

在main函数中,return语句的作用在于离开main函数(析构掉所有具有动态生存时间的对象),并将其返回值作为参数来调用exit函数。如果函数执行到结尾而没有遇到return语句,其效果等同于执行了return0。也就是说,如果函数执行到main结束处时没有遇到return语句,编译器会隐式地为你加上return0;,效果与返回0相同。之所以说这条规定“好坏难定”,一方面是因为它让你省去了多敲几个字的麻烦;另一方面是因为这种便捷会让某些程序员忽视编译器代替他做的工作,而在思维中形成一种错误的认识:此函数可以无返回。

在应用这一规则时,你还得注意以下这两点:

main函数的返回类型是int,不是void或其他类型。

该规则仅仅对main函数适用。

按照以上标准得到了一个完全合乎C/C++标准的最小化的完整C++程序:
int main() { }

本人不推荐使用上述这条规则,建议加上return0;,杜绝那些不必要误解。

请记住:

要想保证程序具有良好的可移植性能,就要标明main函数返回int,而不是void。强烈建议使用以下形式:
int main()
{
// some processing codes
return 0;
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值