int main和void main有什么区别吗?该怎么解决

int main和void main有什么区别吗?
int main () 
{
   return 0;
}



void main () 
{
   程序中无任何return
  //return 0;
}

请问这两种main有什么区别?

我仅仅知道,在c++中,推荐使用int main。。。 但是如何具体的去深入理解这个呢?

我提问的背景是在linux程序下c++程序
------解决思路----------------------
感觉用起来没有太大区别
返回值0代表程序正常退出,返回其他的可以当作错误代码供外层捕获
------解决思路----------------------
标准只有int main吧?谭浩强才有 void main
标准还规定了,如果不收到返回,则自动返回0
------解决思路----------------------
对了,好像标准只有这两种:

int main ( void )
int main ( int argc, char *argv[] )

其余写法是耍流氓,vs等或许可以扩展标准,兼容各种非标写法。但是如果要考虑移植的话,最好遵循标准
------解决思路----------------------
你可以反汇编看看这两种情况下的区别
命令:
objdump -d ./int_main
objdump -d ./void_main
------解决思路----------------------
区别就是有的编译器能编译通过,有的通不过。int main和void main有什么区别吗?该怎么解决
------解决思路----------------------
引用:
我的个人思考

采用int来返回,可以在$?中得到更丰富的信息,来判断这个application具体的执行情况
二采用void来返回,仅仅通过$?来得到是非两种信息

这是我个人的一点思索。。。

不要让我重复发帖到stackoverflow上去,希望咱们中国自己的程序员能多多说点干货出来,呵呵

当然可以说iso推荐如何如何。。。

楼上不都说了吗,干货就是 int 的是标准的,其他的都是野路子。void 的 $? 一样有值,只不过系统帮你填一个默认的而已。
------解决思路----------------------
编译的时候,会将main函数对应的启动函数mainCRTStartup嵌入到可执行文件,启动函数会调用进入点函数,即此处的main函数,当main函数返回时,启动函数便会调用exit函数,并将main函数的返回值传递给它,exit函数函数会调用ExitProcess函数,同时将之前main函数的返回值传递给它,那么操作系统就可以撤销进程并设置进程的退出代码,void main()是没有返回值的,则系统会在调用ExitProcess函数的设置一个默认的退出代码。退出代码在进程异常退出的时候应该是有作用的,不过我们平时涉及很少,所以直接int main()就行了。