我有一個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