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
------解决思路----------------------
对了,好像标准只有这两种:
其余写法是耍流氓,vs等或许可以扩展标准,兼容各种非标写法。但是如果要考虑移植的话,最好遵循标准
------解决思路----------------------
你可以反汇编看看这两种情况下的区别
命令:
objdump -d ./int_main
objdump -d ./void_main
------解决思路----------------------
区别就是有的编译器能编译通过,有的通不过。
------解决思路----------------------
楼上不都说了吗,干货就是 int 的是标准的,其他的都是野路子。void 的 $? 一样有值,只不过系统帮你填一个默认的而已。
------解决思路----------------------
编译的时候,会将main函数对应的启动函数mainCRTStartup嵌入到可执行文件,启动函数会调用进入点函数,即此处的main函数,当main函数返回时,启动函数便会调用exit函数,并将main函数的返回值传递给它,exit函数函数会调用ExitProcess函数,同时将之前main函数的返回值传递给它,那么操作系统就可以撤销进程并设置进程的退出代码,void main()是没有返回值的,则系统会在调用ExitProcess函数的设置一个默认的退出代码。退出代码在进程异常退出的时候应该是有作用的,不过我们平时涉及很少,所以直接int 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 的是标准的,其他的都是野路子。void 的 $? 一样有值,只不过系统帮你填一个默认的而已。
------解决思路----------------------
编译的时候,会将main函数对应的启动函数mainCRTStartup嵌入到可执行文件,启动函数会调用进入点函数,即此处的main函数,当main函数返回时,启动函数便会调用exit函数,并将main函数的返回值传递给它,exit函数函数会调用ExitProcess函数,同时将之前main函数的返回值传递给它,那么操作系统就可以撤销进程并设置进程的退出代码,void main()是没有返回值的,则系统会在调用ExitProcess函数的设置一个默认的退出代码。退出代码在进程异常退出的时候应该是有作用的,不过我们平时涉及很少,所以直接int main()就行了。