C语言中的return语句是如何工作的?

rat*_*zip 0 c return

我对 C 中的 return 语句有一个疑问,它真正从哪里返回:

int base(int a)
{
   if(a == 1)
     return 0;
}

int inherit()
{
   base(1);
   // the rest of the code
}
Run Code Online (Sandbox Code Playgroud)

因此,在该inherit()函数中,base()被调用,并执行return 0, 在本例中;其余代码inherit()仍然执行吗?return 语句实际上是如何工作的?

Jon*_*ler 5

您的代码有点太少了,不舒服。我会感到更高兴的是:

\n\n
int base(int a)\n{\n    if (a == 1)\n        return 0;\n    return 37;\n}\n\nint inherit(void)\n{\n    int n = base(1);\n    printf("Base(1) is %d\\n", n);\n    return n + 3;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

inherit()调用时base(),会存储其当前状态,base()运行该函数并返回一个值。在此代码中,返回值被捕获在变量中,然后在调用和insiden中使用。这就是工作原理:它单方面停止当前函数的执行并继续调用函数。printf()returninherit()return

\n\n

即使在 中main(), areturn也会终止当前函数并向调用函数返回一个值,即 C 运行时 \xe2\x80\x94 并且 C 运行时确保进程退出,通常将返回值中继到“环境” (例如 Unix 上的 shell 程序)。

\n\n

请注意,修改后的代码确保base()始终返回一个值。不这样做通常会导致未定义的行为。如果仅使用值作为参数来调用该函数1,那就“OK”,但是为什么您首先要调用该函数呢?因此,始终确保如果函数应该返回一个值,则该函数的所有返回值(特别包括函数末尾的返回值)都会返回一个值。return在原始代码中,最后没有\xe2\x80\x94 这很糟糕!

\n