不得不说的“return 0;”

引子:

  相信很多的C语言初学者都会有一个问题——问什么在主函数的最后都要加上一行在实际运行过程中没有实际效果的”return 0;”呢?实际上,很多编了4年代码的同学,也只是将它作为一个规范,课堂上老师的解释也很模糊,导致这个问题普遍的被忽略掉,现在,我们就来探讨一下这个”return 0;”在函数中,究竟有什么作用。

一、return的作用

return、continue、break、goto

在C/C++中,这四个关键字设计的初衷都是为了方便程序的开发和阅读,但goto在开发者长期的使用过程中,被认为是“影响程序的阅读,使程序变得混乱,可能还会出现死循环”,被禁用了,所以无论是在教科书中,还是课堂讲授中,都很少提及它。

言归正传,return的作用是终止函数的运行,直接跳出该函数,后面可以加上函数的返回值,也可以直接使用(在无返回值的函数中)。

code 1:

1 int maxNumber(int a, int b)
2 {
3     if(a > b)
4     {
5         return a;//直接跳出
6     }
7     return b;
8 }

二、return 0的作用(主函数中)

“return 0”的作用,就是返回了一个标识,表示正常退出。

什么意思呢?简单点来说,就是告诉操作系统,进程执行完了,而且没有问题,你可以放心的让下一个进程执行了。

如果不加return 0的话,系统无法判断运行结果,会认为他是一个异常返回,会采取相应的措施来处理它。

三、命令行下直观的演示

* "1 && dir "的意思执行1.exe,如果正常返回,则执行dir命令。

code 2:

1 #include "stdio.h"
2
3 int main()
4 {
5     printf("this!\n");
6     return 0;
7 }

picture 1:执行结果

code 3:

1 #include "stdio.h"
2
3 int main()
4 {
5     printf("this!\n");
6 }

picture 2:执行结果

结果很明显,不加return 0;的代码,系统将他视为异常返回了。

四、小的知识点

  • 不要认为把int main()改为void main()就可以不用return 0了,这是一种很不负责的行为。
  • main的返回值必须为int型,不要出其不意,来个return a。
  • C99的编译器已经可以智能的在编译时添加return 0了,但vc6,以及更早的版本中并没有这项功能,而且为了后期的移植,还是要养成return 0的好习惯!

五、总结

无论你知不知道原理,都要加return 0!这是专业人士和业余人士在习惯上的区别!

时间: 2024-10-13 15:36:12

不得不说的“return 0;”的相关文章

lr中exit(-1)和return 0的区别

LR脚本实践:关于lr中exit(-1)和return 0的区别 exit(-1):从当前action里面exit(-1)所在行,当前迭代里面直接退出来,终止运行: return 0:忽略当前action里面return 0后面的脚本,直接运行下一个action,以及下一个迭代: 比如做了个测试: Action6() { int count = 0; if (count ==0) { lr_output_message("%d",count); exit(-1); } lr_outpu

LoadRunner编程之跳出迭代【exit(-1)和return 0】

只运行了一次迭代,就结束了. LR脚本实践:关于lr中exit(-1)和return 0的区别 exit(-1):从当前action里面exit(-1)所在行,当前迭代里面直接退出来,终止运行: return 0:忽略当前action里面return 0后面的脚本,直接运行下一个action,以及下一个迭代: 比如做了个测试: Action6() {  int count = 0;  if (count ==0)  {    lr_output_message("%d",count);

TextView Get Line Count Return 0?

想给TextView加上个"展开/收起"的功能,思路是这样的,给TextView限制maxLine为4行,当getLineCount() >=4时,显示"展开"按钮. 但是无论怎么在textView#setText 之前还是之后去getLineCount()都返回的"0"-.. 仔细"领会"了一番doc: Return the number of lines of text, or 0 if the internal L

include <stdlib.h> return 0

 http://weheartit.com/mx7797/collections/87248520-2015-01-24 http://weheartit.com/qm0tb5fjn/collections/87248521-2015-01-24 http://weheartit.com/xipcpko/collections/87248524-2015-01-24 http://weheartit.com/8oiu7n/collections/87248525-2015-01-24 htt

【未完成0.0】Noip2012提高组day2 解题报告

第一次写一套题的解题报告,感觉会比较长.(更新中Loading....):) 题目: 第一题:同余方程 描述 求关于x的同余方程ax ≡ 1 (mod b)的最小正整数解. 格式 输入格式 输入只有一行,包含两个正整数a, b,用一个空格隔开. 输出格式 输出只有一行,包含一个正整数x0,即最小正整数解.输入数据保证一定有解. 样例1 样例输入1 3 10 样例输出1 7 限制 每个测试点1s 提示 对于40%的数据,2 ≤b≤ 1,000: 对于60%的数据,2 ≤b≤ 50,000,000:

1、CC2541蓝牙4.0芯片中级教程——基于OSAL操作系统的运行流程了解+定时器和串口例程了解

本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 中级教程-OSAL操作系统(OSAL系统解基本套路) 中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系统驱动层和应用层不一样~ 中级教程-OSAL操作系统(ADC-光敏电阻) OSAL操作系统-实验16 串口波特率扩展 OSAL操作系统-实验1

TOJ 2294 POJ 3286 How many 0's? 数位dp

http://acm.tju.edu.cn/toj/showp2294.html http://poj.org/problem?id=3284 题外话:集训结束,回学校了.在宿舍看了这题,没什么好想法,去洗澡了.转了两个澡堂都特么没开..倒是在路上把这题想了.用回自己的电脑,不得不说苹果的字体渲染,真心高一个等级. 题意:给定两个数a和b,从a写到b,问一共写了多少个0. 分析:当然先转化为求0..a写多少个0.网上有更简单的做法,就是枚举每位作为0,则如果这一位本来是0,左边取1..a-1(不

[cocos2dx 3.0 + ios]如何编写iAd的plugin

cocos2dx3.0自带的plugin包含推广,收益等各个方面的第三方插件,但是对iAd没有支持,大概是因为专属于IOS,没有单独成库的必要,不过为了统一使用广告的插件化管理,封装一个专属IOS的IAD插件还是有必要的,搞了一天,在这里做个记录,有兴趣的朋友可以参考一下,不完善的地方请指出: 1:如何创建XCODE库就不说了,创建在其他广告库的同级目录,文件结构也是一样,一共就三个文件: .pch AdsApple.h AdsApple.m 2:要加入到cocos2dx的PluginManag

Ogre2.0 全新功能打造新3D引擎

不知当初是在那看到,说是Ogre2.0浪费了一个版本号,当时也没多想,以为没多大更新,一直到现在想做一个编辑器时,忽然想到要看下最新版本的更新,不看不知道,一看吓一跳,所以说,网络上的话少信,你不认识别人,别人张嘴就来,对别人也没损失,还可以装B下,靠. 从现在Ogre2.1的代码来看,大约总结下,更新包含去掉过多的设计模式,SoA的数据结构(用于SIMD,DOD),新的线程模式,新的渲染流程与场景更新,新的材质管理系统,新的模型格式,新的合成器方案,更新是全方面的,可以说,Ogre2.x与Og