是同一作用域的函数部分中的函数调用

Is a function call within a function part of the same scope

本文关键字:函数调用 函数部 作用域      更新时间:2023-10-16

MyNode在通过函数调用传递时是否仍然存在,或者它是否超出了范围?函数调用中的函数调用是否属于同一范围?

int Foo(){
MyNode node;
node.a = 1;
node.b = 2;
return DoThings(&node);
}
int DoThings(MyNode *node){
// use node to do great stuff
// but does it still exist?
}

我正在调试一些代码,它基本上在这里崩溃了,但是这段代码已经有几十年的历史了,并且已经工作了那么久,所以现在我被迷惑了。

范围是源代码标识符可见的位置。生存期是指在程序执行期间存在对象的时间

node这样具有自动存储持续时间的对象与定义它的块的执行相关联。当该块的执行结束时,其生命周期结束。return 语句可以结束执行,程序控制也可以流向块的末尾。调用子例程只是暂停块的执行;它并没有结束它。该对象在子例程调用期间继续存在,并且可以由子例程访问。