为了账号安全,请及时绑定邮箱和手机立即绑定

如果我为retrun -1,一般的操作系统是否就不会对这个函数进行处理呢?

如果我为retrun -1,一般的操作系统是否就不会对这个函数进行处理呢?

C
胡子哥哥 2023-01-02 19:15:59

#include<stdio.h>
int main(void)
{
int i = 99;
printf(“%d”,i);

return 0;
}
就上面这个函数 来理解返回值0。我想问一下。我是不是可以这样理解。

主函数main 在执行中 流程是 执行i 给i赋值 99 然后输出 i 然后 返回值0 然后0 就交给操作系统 ,操作系统就去执行这个输出99在屏幕上,
那么如果 在主函数 在执行 中 给i赋值99的时候 出错(这个出错是假设), 那么程序就无法继续往下操作,那么这个时候 函数是否就会自动返回-1给操作系统。然后操作系统来终止这个函数?
这里的返回值 我理解的意思 在主函数中,无论你如何对函数内部进行处理,但是必须要经行到return 0这一步。不然 就代表这个函数是失败的。?

查看完整描述

3 回答

?
慕容3067478

TA贡献1527条经验 获得超3个赞

1.void main()
有一些书上的,都使用了void main( ) ,其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 “The definition void main( ) { /* … */ } is not and never has been C++, nor has it even been C.”
这可能是因为 在 C 和 C++ 中,不接收任何参数也不返回任何信息的函数原型为“void foo(void);”。可能正是因为这个,所以很多人都误认为如果不需要程序返回值时可以把main函数定义成void main(void) 。然而这是错误的!main 函数的返回值应该定义为 int 类型,C 和 C++ 标准中都是这样规定的。虽然在一些编译器中,void main() 可以通过编译,但并非所有编译器都支持 void main() ,因为标准中从来没有定义过 void main 。g++3.2 中如果 main 函数的返回值不是 int 类型,就根本通不过编译。而 gcc3.2 则会发出警告。所以,为了程序拥有很好的可移植性,一定要用 int main ()。
2.main()
那既然main函数只有一种返回值类型,那么是不是可以不写?规定:不明确标明返回值的,默认返回值为int,也就是说 main()等同于int main(),而不是等同于void main()。在C99中,标准要求编译器至少给 main() 这种用法来个警告,而在c98中这种写法是被允许的。但为了程序的规范性和可读性,还是应该明确的指出返回值的类型。
3.return 0语句 功能
在C++的程序中,如果你自己写了个子函数。那return的意思是告诉主函数,这个子函数的运行结果,那么同样的道理,main也是个函数,它运行了自然也是有结果的,这个结果通常是告诉操作系统,自身是正常运行结束了(值为0),还是发生了异常(这个值就有很多了)。告诉操作系统值是多少,目的是后台或者SHELL可以从操作系统中取得这个程序的运行结果,从而可以进行进一步操作,比如,你现在这个程序名叫A,是个清屏程序,那么我想在这个程序运行正常后在屏幕上输出运行了。这个输出是由另外一个B程序实现的,那么如果没有返回值,怎么知道这个程序运行正常还是不正常呢。上面的是main函数返回值最常用的作用。当然。其实main函数本身是可以调用这个返回值的,这个的作用就在于多线程的编程中,另外一个线程等待这个程序执行完毕,等待的就是这个MAIN函数的执行结果。

 


查看完整回答
反对 回复 2023-01-06
?
紫衣仙女

TA贡献1573条经验 获得超15个赞

你的理解有误。首先,这段代码是先执行了输出99在屏幕上,然后在退出之前才返回的0。而不是正常退出了之后系统才去处理输出。其次,返回多少是程序员自己控制的,你喜欢将你上面代码的return 0改成return -1,程序就返回-1出去。另外,程序出错的时候,也不会自动返回什么值给系统,全都是程序员自己代码控制。而至于返回出去的值怎么使用,也不是操作系统自己处理,而是外部调用的人自己根据需要控制。例如如果B程序是被A程序在程序中调用的,A程序就可以检查B程序的返回值来进行相应处理。而一些脚本,批处理也可以检查程序返回值来进行正确的操作。至于返回什么代表什么,是这个程序的开发者自己制定。只是,一般习惯上,都在运行正常,正常退出的时候return 0.

查看完整回答
反对 回复 2023-01-06
?
守着一只汪

TA贡献1621条经验 获得超3个赞

打印语句是立即执行,所以理想的情况是先打印99,然后退出main函数,只不过,打印的数据立即会交给串口驱动然后才退出main函数,而串口驱动是有自己的缓存的,所以会有一定延迟。

执行赋值操作出错,系统会做出不同响应,这个要取决于具体的错误类型,比如访问空指针、除数为0都是严重错误而停止进程
函数返回值的意义是程序员定义的,函数外部根据这个定义来决定函数运行的情况,比如我可以让函数返回0来代表函数执行失败,也可以定义-10来代表执行失败。

查看完整回答
反对 回复 2023-01-06

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信