在 C 语言里面 return 是保留关键字,主要有两大核心作用,第一是立刻终止当前正在执行的函数,把程序控制权交还给调用这个函数的位置,第二是可以向调用方带回一个返回值,返回值的数据类型必须和函数定义的时候声明的返回类型保持匹配。之所以需要 return,是 C 语言所有函数都有明确的返回类型约定,函数执行结束之后要么带回数据,要么提前退出,比如遇到错误条件不需要继续往下执行代码,就可以提前写 return 跳出函数,避免后面无效运算。很多初学者会混淆 main 函数里面 return 和普通自定义函数里面 return 的差别,main 函数的 return 会把程序退出状态码返回给操作系统,普通自定义函数的 return 只是返回给调用它的上一级代码,这个区别是重点,同时还要注意 void 类型函数里面的 return 可以不带数值,只用来提前退出,不能写返回值。
基础语法分类
第一种 带返回值的函数,函数声明返回类型不是 void,return 后面必须跟上对应类型的值或者表达式
写法示例
int add (int a,int b)
{
return a + b;
}
第二种 void 类型函数,函数没有返回数据,return 后面可以什么都不写,只用来提前终止函数,也可以完全不写 return,函数运行到末尾自然结束
写法示例
void printMsg ()
{
printf ("输出信息");
return;
}
第三种 main 函数,标准写法 main 返回 int 类型,return 0 代表程序正常退出,非零数值代表程序异常退出,操作系统可以读取这个退出码判断程序运行是否成功。
完整代码示例
include
int checkNum (int n)
{
if (n < 0)
{
return -1;
}
return n 2;
}
int main ()
{
int res = checkNum (5);
printf ("% d",res);
return 0;
}
这段代码里面 checkNum 函数,如果传入负数,执行 if 里面的 return -1,直接退出函数,后面 n 乘 2 的代码不会运行,如果数值大于等于零,就执行最后的 return n 乘 2,把结果返回给 main 函数,main 函数最后 return 0 结束整个程序。
提前返回的设计思路
提前返回也叫早退出,就是在函数开头做参数校验,如果参数非法,马上 return 退出,不用把全部代码嵌套在 if 判断里面,这种写法可以减少深层嵌套,提升代码可读性,是工程里面很常用的写法。但是也要注意,如果函数里面有动态申请内存 打开文件这类资源操作,提前 return 的时候,必须在 return 之前手动释放已经申请的资源,不然会出现内存泄漏 文件句柄没有关闭的问题,这个是提前 return 最容易踩坑的地方。
相关对比表格
| 函数返回类型 | return 后面是否可以带数值 | 主要作用 |
|---|---|---|
| int float double 等非 void 类型 | 必须带回匹配类型的值 | 返回运算结果,同时终止函数 |
| void 类型 | 不能带返回值,只能单独写 return | 仅提前终止函数 |
| main 函数 int 类型 | return 0 正常退出,非零代表错误码 | 退出程序,向操作系统传递状态码 |
深度拓展要点
第一 类型匹配规则,return 后面表达式的类型,如果和函数声明返回类型不一样,编译器会做隐式类型转换,比如函数声明是 int,return 写浮点数,小数部分会被截断,这种隐式转换容易产生精度丢失,正式代码最好主动做类型转换。
第二 return 之后的代码属于不可达代码,也就是 return 语句执行之后,后面所有代码永远不会运行,部分编译器会给出警告,提示 unreachable code,写代码的时候不要在 return 后面保留多余代码。
第三 递归函数里面 return 非常关键,递归必须依靠 return 把每一层递归计算结果逐层传回上一层,如果递归出口忘记写 return,最终返回值会变成随机垃圾值,递归逻辑直接失效。
第四 数组不能通过 return 直接返回数组首元素之外的数组整体,return 只能返回单个值,如果需要返回多个结果,一般使用指针参数,或者结构体。
第五 旧标准 C 语言里面,如果函数没有写返回类型,默认是 int 类型,现代编译器已经废弃这个默认规则,推荐所有函数显式写清楚返回类型。
【常见问题】
问题 1 c 语言中 return 的使用方法,void 函数里面能不能写 return 带数字
回答 1 c 语言中 return 的使用方法,void 类型函数不可以在 return 后面携带数值,因为 void 代表没有返回数据,只能单独写 return 用来提前退出函数,如果强行写返回数值编译器会报错。
问题 2 c 语言中 return 的使用方法,main 函数 return 0 是什么含义
回答 2 c 语言中 return 的使用方法,main 函数里面 return 0 代表程序正常结束,这个数值是程序退出状态码,操作系统可以识别,写其他非零数字一般用来标记程序出现错误。
问题 3 c 语言中 return 的使用方法,提前 return 为什么会造成内存泄漏
回答 3 c 语言中 return 的使用方法,如果提前 return 的时候,前面已经 malloc 申请内存或者打开文件,但是没有执行 free 关闭文件就直接 return,资源没有释放,就会产生内存泄漏,写提前 return 分支必须补上资源释放操作。
问题 4 c 语言中 return 的使用方法,return 后面的代码还会执行吗
回答 4 c 语言中 return 的使用方法,一旦执行 return 语句,当前函数立刻终止,return 后面的代码永远不会被执行,这类代码叫做不可达代码,编译器通常会给出警告提示。
【免责申明】
本文代码属于 C 语言教学演示,仅用于学习练习,隐式类型转换 资源释放相关逻辑需要结合业务场景处理,不同编译器对不可达代码警告等级存在差异,实际项目开发请补充资源回收与异常分支处理,本文不对所有复杂函数场景的运行结果做绝对保证。


