关于C语言的主函数中的return 的用法 求高手解

例如intmain(){if(a>1){return;}}我已经知道C语言中return0的意思;我请问C语言main函数中单独的return表示什么意思?谢谢... 例如 int main()
{
if(a>1){
return;
}
}

我已经知道C语言中 return 0的意思; 我请问 C语言main函数中单独的return 表示什么意思?谢谢
展开
 我来答
百度网友6dc5d8b
推荐于2018-03-14 · TA获得超过721个赞
知道小有建树答主
回答量:390
采纳率:100%
帮助的人:276万
展开全部

蛋疼死了

楼下这么多,就没一个解释正确的

这些人纯粹只学C语言而不去了解C的本质,无奈,唉


C语言,仅仅是一种高级语言,到头来都是要转化成机器码拿到CPU上去执行的


拿PC下的C语言来说

对于一个函数

当返回类型是字节、字、双字的情况下,返回值是会被送入寄存器eax带出去的

当返回值是大于双字的情况是很复杂的,在这里我也不解释了,我怕500字都写不完


事实上 无论是return ; 还是return X;

在汇编上都只有一条指令:ret(retn)

只不过对于return X; 会在 执行ret指令之前对eax寄存器赋值:

如果是return 0 ; 可能编译器会这样做:

xor eax,eax

ret

其他情况类似


然后从C语言角度讲

对于返回类型为void的函数

函数体内可以出现return;语句来表示结束本函数的执行 

这个时候eax还是有值的,因为 函数返回类型是void,因此在调用该函数的地方不可能会去用该函数的返回值,也就意味着该返回值是毫无意义的


楼主想问的 单独的return;语句,对于这行代码,一般只用在返回类型为void的函数体内

若出现在非void返回类型的函数体内,那么返回值是隐含在寄存器eax中的


然后对于有返回值的函数来说

return后面是肯定需要跟一个值的

这个值是被送入寄存器eax带出来的~

我说再多 也许还是会有人不信(本人玩逆向的,这一切信不信那是你们的事,我只能把事实告诉你们,我也只能做到这样了)

下面直接上代码上图:

(微软任何C/C++编译器、VC/VS这些、都支持编译此代码,没有警告,没有错误)


注:主函数不主函数的return都是没有区别的

但是main函数很特别,特别在它有好多种写法,标准C真正的主函数返回类型是int

有2个参数,一个是命令行参数个数,一个是命令行参数

windows下面的主函数可以有三个参数,前两个参数跟标准C一样,第三个参数是环境变量

这些参数都是由mainCRTStartup函数传进来的,而mainCRTStartup再往上你还要研究的话那。。。。那。。。那。。。我只能告诉你这些参数都是要操作系统传进来的吧~~~

我们编程的时候,也许有些菜鸟会把main写成如下形式:void main()

其实这种写法在编译之后都是会被转化成标准写法的底楼说的 不带返回值系统默认返回0这完全是不靠谱的,因为事实当中返回值都是被寄存器eax带出去的,而对于main是必须要返回值的,菜鸟写了没返回值的main在编译之前就被编译器替换掉了,哪来的默认返回0的说法?何来默认?系统会把你写的main换成 标准main形式!标准main会在底下返回0

主函数return的值只有你在其他进程中创建子进程,子进程的返回状态被父进程接收的值就是main的返回值,所以,在你写的程序不需要被其他进程创建的话,main的返回值是无关紧要的

追问
本菜鸟刚接触C语言 ,更不懂汇编语言 ,你给出的例子中return出现在子函数中,所以当执行return时会回到主函数上来,但是我不清楚return在main函数中,而且main函数是void类型的, 他会怎么执行  谢谢高手
追答
void main()
{
语句1;

语句2;

return;

语句3;

}

程序运行的时候语句3不会被执行
因为碰到main中的return的时候程序就调用ExitProcess结束进程了(你直接理解为程序结束运行就行了)
匿名用户
2013-06-12
展开全部
main函数是void类型时,return表示程序结束,后面的代码不再执行。根据实际需要,程序可以在任何地方结束。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-06-12
展开全部
单独的return 就是退出main函数 但是它不带返回值,其实主函数你若没有返回值时,系统会默认返回值为 0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
成灵慧4d
2013-06-12 · TA获得超过189个赞
知道小有建树答主
回答量:356
采纳率:0%
帮助的人:195万
展开全部
return 0;
写在主函数最后一行就行 了
函数体如果你想退出可以用
exit(0);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
屋然
2013-06-12
知道答主
回答量:36
采纳率:0%
帮助的人:18.4万
展开全部
这个运行起来肯定会报错,正如自定义的这个函数,返回的是一个int型的数。你这个函数所要起到的作用判断a是否大于1,所以你在自定义函数时要给一个传递参数,
int main(int a)
{
if(a>1)
return 0;
else
return 1;
}
在主函数调用这个子函数时,如果a>1返回的值为0,否则返回的值就为1.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式