哪位高手知道void main和int main的区别?

iamwiner 2004-10-23 09:45:33
我买了一本书:清华大学出版社的<<捉虫历险记-常见C++ BUG大围剿>>
上面第一例子就说:虽然void main在所有的编译器中都可以通过
但效率低!是错误的!
还说在C++标准中main函数是int的而不是void的?
我查了一下MSDN和网络,都没有找到相关内容
因此,想问一下,void main和int main的区别到底有哪些?
...全文
2729 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxjddd 2004-10-25
  • 打赏
  • 举报
回复
区别就是 void main 是错误的:)
而 int main 是标准所要求的
hsuyuan 2004-10-25
  • 打赏
  • 举报
回复
受益匪浅!
airwudi 2004-10-25
  • 打赏
  • 举报
回复
我没有看到右上角有提问的字样啊?
到底怎么提问啊,麻烦各位帮忙一下
yangfasheng 2004-10-25
  • 打赏
  • 举报
回复
return 0

在自动生成的工程程序中也是默认为 return 0
Devillove 2004-10-25
  • 打赏
  • 举报
回复
return 0;
yangfasheng 2004-10-25
  • 打赏
  • 举报
回复

楼主所提出来的问题应该是不少初学者的困惑,
我也有过,即使是现在也不是很清楚,而是参照MS自动生成时的标准工程来写.

个人觉得这样的帖子发在这里应该没有什么有对的.
不知道楼上的为什么有这样的看法.
grayloach1 2004-10-25
  • 打赏
  • 举报
回复
to: airwudi(飞人) 提问请到各小区。遇到问题要先试着自己解决!
zeusnchen 2004-10-25
  • 打赏
  • 举报
回复
其实main函数可以看成是操作系统期待的一个入口函数,
操作系统认为这个函数应该是返回一个int返回值的,并且带有三个参数
既,它的原型应该是:
int main(int argc, char **argv, char **env)
一般的编译器可以接受任何形式的main函数,只要它的函数名字是main就可以了
而对main函数的具体签名不做要求
所以你写
void main()
void main(int argc, char **argv)
...
都是一样的,只是要明白,任何同
int main(int argc, char **, char **)
不一样的签名都可能有问题,例如,如果返回值是void
你可能无法正确获取程序退出时的状态等等
joseph0311 2004-10-24
  • 打赏
  • 举报
回复
int main()....
怒风in南京 2004-10-24
  • 打赏
  • 举报
回复
学习学习
纪俊 2004-10-24
  • 打赏
  • 举报
回复
正常退出就是return 0
不写也是这样子的
/////////////////////////////////////////////////////////////////////
欢迎大家使用编程文档手册V3.5,编程辅助类软件

集编程文档的收集、查询、浏览、编辑等功能于一体的辅助编程类软件。通过日积月累,相信本软件将给广大程序开发人员以及编程爱好者们带来很大的帮助。

下载地址:
天空软件站:http://www.skycn.com/soft/11906.html
华军软件园:http://www.onlinedown.net/soft/6496.htm
donrong 2004-10-24
  • 打赏
  • 举报
回复
正常退出到底是return 0还是1

好像众说纷纭呀
liyufeng1983 2004-10-24
  • 打赏
  • 举报
回复
大家说得都很对啊,还是用标准好。
athena301 2004-10-24
  • 打赏
  • 举报
回复
wegotnothingtolosebu(再教育,把穷人通通打昏!!)

I 服 了 YOU!!!!!
zengkun100 2004-10-24
  • 打赏
  • 举报
回复
pjincz(无定乾坤),真强!
lgwen 2004-10-24
  • 打赏
  • 举报
回复
又学了点东西
  • 打赏
  • 举报
回复
使用int主要是可以给操作系统返回一个值,让操作系统明白这个程序执行的状态,比如执行这个程序后下一步可能要根据这个返回值做分支处理,如果是void的话就是一个哑巴程序,异常退出和正常推出无法区别,的确移植性很差。

int mian是标准的写法
pjincz 2004-10-24
  • 打赏
  • 举报
回复
对于一个函数,如int max(int a,int b)
那么编译器在运行a=max(5,7);时;
做的工作只是把寄存器ax复制给a
所以说对于一个没有return语句的int型变量
int dd(int x)
{
x=x*5;
}
当运行a=dd(3);时a的结果就是15
但如果有一个函数void maxv(int a,int b)
同样他没有return语句(或者有return语句没有返回值)
如果我们写出a=maxv(1,2)
编译器就会认出我们把一个无返回类型的函数赋值给一个变量
从而产生一个错误.
但是如果出现编译器无法识别原函数(只是一个假设)让编译器通过了编译,
那么结果会是和有返回值,无return的结果一样.
这里就是这种情况,操作系统默认一个程序的返回为int
但是我们的main却是void
所以操作系统得到的返回值是我们最后的操作结果中的ax!
一般来说操作系统会把返回的值丢弃掉!
也就是说,这时我们用int main()和void main()是没有区别的!
但是有些时候却不是这样的.大家都知道,我们一般来用0返回表示程序正常结束!
我们如果在其他程序中调用这个程序的话,
我想用来判断只程序是否正常的被执行时非常的重要的!
这时,用void main()就非常的有害了!
所以说,我个人坚决的反对用void main()
其实说用int main()累着什么人了吗!
也没有啊至少你还可以少写一个void,
只不过在程序的结束处要写上return 0罢了!
lonelydreamsym 2004-10-24
  • 打赏
  • 举报
回复
up
李海辰 2004-10-24
  • 打赏
  • 举报
回复
呵呵,我自己重写 mainCRTStartup 函数,然后调用我自己的入口点函数~~ 通常我喜欢用 void AppEntry()。呵呵~~至于 C Runtime 原来的入口函数嘛~~去 die 吧~~
加载更多回复(19)

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧