我有一个function()
,它调用anotherFunction()
。 在anotherFunction()
里面,有一条if语句,当满足时返回main()
而不是function()
。你怎么做到这一点?谢谢。如何返回主,而不是调用它的函数
-1
A
回答
2
您可以用setjmp和longjmp函数绕过C中的正常返回序列。
他们有一个例子,在维基百科:
#include <stdio.h>
#include <setjmp.h>
static jmp_buf buf;
void second(void) {
printf("second\n"); // prints
longjmp(buf,1); // jumps back to where setjmp was called - making setjmp now return 1
}
void first(void) {
second();
printf("first\n"); // does not print
}
int main() {
if (! setjmp(buf)) {
first(); // when executed, setjmp returns 0
} else { // when longjmp jumps back, setjmp returns 1
printf("main\n"); // prints
}
return 0;
}
1
1
大多数语言都有例外这使得这种类型的流量控制。 C没有,但它确实具有执行此操作的库函数setjmp
/longjmp
。
5
在“标准”C中,你不能那样做。你可以用setjmp和longjmp来实现,但是强烈建议你不要这么做。
为什么不只是从anotherFuntion()
返回一个值并根据该值返回?事情是这样的
int anotherFunction()
{
// ...
if (some_condition)
return 1; // return to main
else
return 0; // continue executing function()
}
void function()
{
// ...
int r = anotherFuntion();
if (r)
return;
// ...
}
您可以返回_Bool
或者如果该功能已经被用来返回别的东西
+0
@Bathsheba它可能在某些情况下有用,但在这种情况下不会有用,因为有更简单和更安全的解决方案 – 2014-12-05 16:56:45
+2
setjmp和longjmp都是标准C,因为您甚至可以引用它们。 – b4hand 2014-12-05 16:59:29
相关问题
- 1. 从函数返回函数而不调用返回函数
- 2. Javascript调用函数,不要再调用它,直到它返回
- 3. 如何在调用函数后正确返回主函数?
- 4. JS:如何使用返回类型的回调函数来返回主被调用函数
- 5. 调用函数或返回主方法
- 6. 从javascript函数返回而不等待被调用函数
- 7. 函数返回NULL值,而不是
- 8. 函数返回“无解”而不是“无”
- 9. 函数返回undefined而不是true/false
- 10. 当调用函数时,它返回undefined
- 11. 函数返回undefined即使它不是
- 12. 提取函数的返回类型而不调用它(使用模板?)
- 13. 如何让map函数返回一个值而不是数组?
- 14. 如何使用从mongodb中取回的数据而不是返回它
- 15. 如何返回数组而不是FirebaseListObservable
- 16. 在HTML5中,我如何直接返回SQLite调用的结果,而不是将它们交给函数?
- 17. 如何从使用gtk回调调用的函数返回值?
- 18. innerHTML显示函数,而不是函数的返回值
- 19. 使用回调函数返回函数
- 20. 如何返回一个函数,然后再调用它?
- 21. 如何在返回之前递增计数器而不传递回调函数?
- 22. 如何等待回调函数返回?
- 23. Django HttpResponseRedirect,它返回None而不是
- 24. 它返回false而不是true
- 25. 如何将回调函数的值返回给调用者?
- 26. Knockout.js定义函数返回函数,而不是价值
- 27. 调用一个const函数而不是它的非const版本
- 28. 如何确定函数是否会返回子函数而不执行
- 29. 需要jQuery.ajax的responseText返回,而不是使用“成功”函数
- 30. 如何使用回调函数通过nodejs中的嵌套函数从主函数返回?
@mafso通过返回一个指针:啊,你说得对。标准中提到“初始调用main()'”暗示可能有其他的。 – 2014-12-05 17:03:30