【发布时间】:2023-01-02 00:23:17
【问题描述】:
直到今天我对这些概念的理解功能和返回声明是这样的:
当控制到达函数的末尾时,控制返回给调用者(函数)。无论该函数是否具有
return语句,都会发生这种情况。
退出时的 ISO C()
在阅读有关C程序的终止,我看到了 ISO C (7.22.4.4.6) 的声明 -
退出函数不能返回给它的调用者。
这种说法与我之前的理解相矛盾。
ISO C 退货声明
所以我检查了 ISO C 对
return声明的评论 (6.8.6.4) 并发现了这个:
- 带有表达式的 return 语句不得出现在返回类型为 void 的函数中。没有表达式的 return 语句只能出现在返回类型为 void 的函数中。
- return 语句终止当前函数的执行并将控制权返回给其调用者。一个函数可以有任意数量的返回语句。
我的新结论
- “return”语句使宿主环境强制将控制权返回给调用者(函数)。
- 如果函数有返回类型
void的,如果它包含return语句,则宿主环境必须将控制返回给调用者(函数)。否则(即,如果return语句不存在),则主机环境可能将控制权返回给调用者。- 默认情况下,许多实现选择将控制返回给调用函数,即使被调用函数没有
return语句,但exit()的情况除外(此异常可能扩展到其他一些功能也一样)。我的结论正确吗?
【问题讨论】:
-
“宿主环境”在这里是一个特定的术语。它不涉及所有功能。您的程序退出(“返回”)到它的宿主环境,但函数只是返回(正确地返回)到它们的调用函数。
exit函数的处理方式是总是导致您的程序终止,并退出到其宿主环境。exit函数永远不会返回(正确地返回)到您从中调用它的函数。 -
没有矛盾。控制永远不会到达
exit函数的末尾,因此它永远不会返回给调用者。 -
您所关注的“退出”操作与“返回”语句无关,因此您对“返回”的任何结论都不是真正相关的(并且是错误的)。 'exit' 函数导致调用进程不存在。没有任何东西能够做任何返回,或者被返回到。
标签: c function return environment exit