【问题标题】:What does 'return' fundamentally do in C?\'return\' 在 C 中的基本作用是什么?
【发布时间】: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) 并发现了这个:

  1. 带有表达式的 return 语句不得出现在返回类型为 void 的函数中。没有表达式的 return 语句只能出现在返回类型为 void 的函数中。
  2. return 语句终止当前函数的执行并将控制权返回给其调用者。一个函数可以有任意数量的返回语句。

    我的新结论

    1. “return”语句使宿主环境强制将控制权返回给调用者(函数)。
    2. 如果函数有返回类型void 的,如果它包含 return 语句,则宿主环境必须将控制返回给调用者(函数)。否则(即,如果 return 语句不存在),则主机环境可能将控制权返回给调用者。
    3. 默认情况下,许多实现选择将控制返回给调用函数,即使被调用函数没有return语句,但exit()的情况除外(此异常可能扩展到其他一些功能也一样)。

      我的结论正确吗?

【问题讨论】:

  • “宿主环境”在这里是一个特定的术语。它不涉及所有功能。您的程序退出(“返回”)到它的宿主环境,但函数只是返回(正确地返回)到它们的调用函数。 exit 函数的处理方式是总是导致您的程序终止,并退出到其宿主环境。 exit 函数永远不会返回(正确地返回)到您从中调用它的函数。
  • 没有矛盾。控制永远不会到达 exit 函数的末尾,因此它永远不会返回给调用者。
  • 您所关注的“退出”操作与“返回”语句无关,因此您对“返回”的任何结论都不是真正相关的(并且是错误的)。 'exit' 函数导致调用进程不存在。没有任何东西能够做任何返回,或者被返回到。

标签: c function return environment exit


【解决方案1】:

您的功能在您的程序中。它们不是宿主环境的一部分。宿主环境在你的程序之外。在普通的通用多用户系统中,主机环境是操作系统(包括用于执行程序的命令行 shell 之类的东西)。

return 语句返回到程序内部的调用函数。流向函数结束} 的程序控制将控制返回给调用函数。调用exit 不会返回到程序中的函数;它向操作系统发出终止程序的请求。 (但是,在发出此最终请求之前,exit 可能会执行各种清理工作并调用退出处理程序,因此程序中的某些函数可能仍会在程序终止之前执行。)

【讨论】:

    猜你喜欢
    • 2022-11-29
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 2021-11-08
    相关资源
    最近更新 更多