开发者社区> 问答> 正文

一段代码,这里为什么用exit(1)而不是return 1?还有如何解读这种避免String = NULL的方式?

学校C语言课的PPT,关于 Command line arguments的,讲的很粗,例题直接看不懂。
直接上图片了,因为有老师的标注,截图比较完整。
我的疑问在于,
1.虚线框内的代码有什么作用,老师说为了避免String = NULL?并不理解。
2.为什么用fprintf并且括号内是stderr?如果没有特殊作用,那我就理解为老师只是为了演示课堂内容了……
3.这里为什么exit()和return混用,各有什么目的?
screenshot
新入门,求助各位前辈,谢谢!

附上图的原题:
screenshot

展开
收起
a123456678 2016-06-12 10:21:39 2438 0
1 条回答
写回答
取消 提交回答
  • 原本不打算回答的,但看了楼上vczh的回答,我不太赞同,所以还是发表一下自己的看法吧,如有错误敬请指出。

    因为这段程序需要传入2个参数,后面的2个if语句就是用来读取这2个参数的。而所有程序在运行时第一个参数都是该程序本身的可执行文件的名称,所以为了保证程序传入了2个参数,就需要判断argc的值是否等于3。如果不提前判断,后面的2个if语句中就可能会读取到错误的数据(也就是vczh所说的野指针数据)

    将普通信息和错误信息分别输出到“标准输出”和“错误输出”中,是一种良好的习惯,这样用户就可以方便地区分正常输出和错误输出,例如把两者重定向到不同的日志文件

    对于只有一个线程的程序,在main中使用exit和return的效果是一样的,都是结束程序。但如果不是在main函数中,或者程序开了多个线程,那么return就无法达到退出程序的目的了。所以退出程序使用exit是一种良好的习惯。第一,它看起来清晰,exit一眼就知道是用来退出的;第二,它可以保证在任何情况下都能正确退出程序,例如我前面所说的开启了多线程或当前不在main函数中的情况。

    最后一点是我和vczh观点最大的不同。我认为,当你的意图是主动、并且是确定地要退出程序时,就用exit,不要用return,其他情况,用return。

    我认为你老师的这个程序写的很好,最后一句之所以用return,是因为程序已经执行到最后,main方法是时候“返回”了,这句代码的意图更强调的是main方法正常结束了,而不是我要在这里退出程序,所以这里用的是return(正常返回),而不是exit(强调的是我要让程序退出)——虽然2者在效果上是一样的。

    2019-07-17 19:33:18
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
The-Future-Of-Applepwn-How-To-Save-Your-Money 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多