【发布时间】:2014-01-19 04:04:49
【问题描述】:
我希望能够强制“双重返回”,即拥有一个强制从其调用函数返回的函数(是的,我知道并不总是调用函数等)显然我希望能够通过操作堆栈来做到这一点,并且我认为至少以某种不可移植的机器语言方式是可能的。问题是这是否可以相对干净和便携地完成。
给出一段具体的代码来填写,我要写函数
void foo(int x) {
/* magic */
}
使下面的函数
int bar(int x) {
foo(x);
/* long computation here */
return 0;
}
返回,比如说,1;并且不执行长计算。假设 foo() 可以假设它只被具有 bar 签名的函数调用,即 int(int)(因此明确知道它的调用者返回类型是什么)。
注意事项:
- 请不要跟我说这是不好的做法,我是出于好奇而问的。
- 调用函数(在示例中为
bar())不得修改。它不会知道被调用的函数在做什么。 (同样在示例中,只能修改/* magic */位)。 - 如果有帮助,您可以假设没有发生内联(可能是不切实际的假设)。
【问题讨论】:
-
这不仅仅是不好的做法;如果不修改
bar或者做一些带有例外的愚蠢技巧,这是不可能的。这种事情完全是结构化编程运动所反对的(我应该补充一下,这是合理且成功的)。 -
内部函数应该如何知道调用者的返回类型是什么?!
-
“相对干净和便携”是非常主观的。投票以基于意见的方式结束。
-
@KerrekSB:这是根据关于调用者类型的假设得出的。我现在说得更清楚了。
标签: c++ c stack return stack-smash