在关闭括号之前C会破坏返回变量吗?

Nil*_*esh 2 c

有人告诉我,在C(和C++)中,返回语句中存在的变量在关闭函数的大括号之前被销毁.

前 -

int func() {
    int a = 10;
    return a; // I was told that a is destroyed here
} 
Run Code Online (Sandbox Code Playgroud)

它真的发生了吗?如果是,函数如何将值返回给调用函数?

我的直觉告诉我,变量值被推送到返回值的堆栈,当它返回到调用函数时,通过获取返回值来弹出堆栈顶部.不确定我是否正确.

Ste*_*n C 5

在关闭括号之前C会破坏返回变量吗?

是的......有点儿.

局部变量在方法结束时超出范围,之后,它们将不再可访问.

在C中,这仅仅意味着变量本身的存储可用于其他用途.但是变量没有活跃的"破坏".

在C++中,当变量超出范围时,将调用变量的析构函数(如果有的话).

在实现级别,通常使用堆栈管理局部变量的存储空间.但我不认为这是各自语言规范的强制要求.


值得注意的是,我们正在讨论的是变量,而不是价值观.在您的例子中,变量的值将被返回给调用者(韦迪return说法),并会继续存在超越}...