【发布时间】:2011-09-01 13:51:00
【问题描述】:
W. Richard Stevens 的《UNIX 环境中的高级编程》指出:
"自动变量和寄存器的状态是什么 主函数中的变量?”
关于当你 longjmp 从堆栈下方的某个位置返回主函数(或其他函数)时会发生什么。
接着说:
“这取决于。大多数实现不会尝试回滚这些 自动变量和寄存器变量,但所有的标准 说是他们的价值观是不确定的。如果你有自动 你不想回滚的变量,用
volatile属性。声明为全局或静态的变量 当longjmp被执行时被单独留下。
似乎他是在说正常的堆栈变量不会将它们的值设置回 setjmp 时的值 - 但是在 longjmp 返回后,函数的其余部分不能依赖它的堆栈变量这似乎很疯狂,所以我猜我错了。
有人可以为我定义“自动变量”并解释具体是什么没有设置回其原始值以及为什么会这样吗?
【问题讨论】:
-
自动变量只是一个具有
auto存储类的变量,这是没有其他存储类声明的函数变量的默认值。这是一个关键字,你知道的。