C语言中'return'的本质作用是什么?我的相关结论是否正确?
关于C函数与return语句的理解验证
初始理解
当程序执行到函数末尾时,控制权会返回至调用方(函数),无论该函数是否包含
return语句。
ISO C关于exit()
查阅C程序终止相关内容时,看到ISO C(7.22.4.4.6)中的表述:
exit函数无法返回至其调用方。
这与初始理解产生了矛盾。
ISO C关于return语句
于是查阅了ISO C关于return语句的说明(6.8.6.4):
- 带表达式的return语句不得出现在返回类型为void的函数中;无表达式的return语句仅可出现在返回类型为void的函数中。
- return语句会终止当前函数的执行,并将控制权返回至调用方。一个函数可以包含任意数量的return语句。
我的新结论
return语句会强制宿主环境将控制权返回至调用方(函数)。- 对于返回类型为
void的函数,若包含return语句,则宿主环境必须将控制权返回至调用方;若未包含return语句,则宿主环境可选择是否返回控制权。- 多数实现默认会将控制权返回至调用方,即使被调用函数未包含
return语句,但exit()函数除外(该例外可能适用于其他部分函数)。
结论验证
结论1正确:
return语句的行为是C标准明确规定的,它会立即终止当前函数执行,并将控制权返回给调用方,这是强制行为,不存在“宿主环境选择”的空间。结论2错误:对于返回类型为
void的函数,无论是否包含return语句,当执行到函数末尾时,控制权必须返回给调用方——这是C标准的要求,并非由宿主环境决定。只有当函数执行过程中调用了exit()、abort()这类直接终止整个程序的函数时,才不会返回控制权。结论3部分有误:
- 对于
void返回类型的函数,执行到末尾返回控制权是标准强制要求,不是“多数实现默认”;而对于非void返回类型的函数,未写return就到末尾属于未定义行为,此时程序的行为不可预期,不能默认它会返回控制权。 exit()的情况不属于“函数没return就不返回控制权”的例外:调用exit()会直接终止整个程序,程序本身都停止运行了,自然不存在回到调用方的可能,这是exit()的设计目的,和函数是否有return无关。
- 对于
内容的提问来源于stack exchange,提问作者user20333834
相关产品推荐
相关产品推荐

