0
A
回答
2
調用abort
函數會導致程序被終止。因此,abort
不會返回。
2
許多C庫函數永遠不會返回給調用者:
exit()
終止程序,提供了一個退出狀態。abort()
終止程序並顯示錯誤消息。longjmp()
將控制轉移回到由相應setjmp()
彙編代碼要麼保存分支點直接從返回地址不同的地址或進行系統調用終止該程序。
1
說:「永遠不會返回」必須無條件做這五兩件事之一的功能:
- 進入無限循環(
for(;;);
) - 執行「控制的非局部轉移」,使得一些其他函數似乎返回(
longjmp
,swapcontext
) - 調用導致操作系統至少終止當前執行線程的「系統調用」(
pthread_exit
,_exit
,reboot
) - 執行某種禁止或無效的機器操作(無效的指令,訪問映射的內存等),再次導致操作系統終止進程
- 調用,它上面的東西一個其他一些功能。
abort
通常是5-> 3,4一些組合,並作爲最後的手段1,因爲其合同終止進程後事情都已經走了可怕的錯誤:它不是出了問題它嘗試的第一件事(通常是kill(getpid(), SIGABRT)
)將不起作用。
在較低的層次上,我們可以談論一個「執行線程」究竟是什麼,操作系統如何設置它們並將它們關閉,以及操作系統本身是如何由引導加載程序調用的程序,如果你以正確的方式眯起來,「運行程序」只是動態地修改操作系統的代碼,以包含程序的代碼,然後跳轉到該程序。但也許你不希望我在這個答案框中放棄整個操作系統課程。
+0
感謝您的詳細解釋,但@dbush的回答非常簡短。 – adarsh
相關問題
- 1. php函數再次返回函數
- 2. 如何返回0並終止函數?
- 3. 如何返回在SQL Server ISNULL函數不止一個值
- 4. 如何返回一個函數,然後再調用它?
- 5. 如何禁止函數返回R中的「Null」?
- 6. 從函數返回函數而不調用返回函數
- 7. 如何返回函數?
- 8. 如何從函數返回
- 9. 如何確保遞歸函數在返回之前不會再次調用
- 10. 如何通過CHID函數返回父函數返回
- 11. Javascript調用函數,不要再調用它,直到它返回
- 12. 函數返回一個工作表名稱不再工作
- 13. 「OBJECT_NAME」函數不再返回對象的名字
- 14. 檢查函數返回值而不再執行它
- 15. 退出函數並再次調用本身而不返回undefined
- 16. jQuery $ .get不再返回數據
- 17. .NET Webservice不再返回JSON數據
- 18. RavenDB指數不再返回結果
- 19. 如何標記返回類型不返回的函數?
- 20. PHP函數'返回'不返回值
- 21. 返回deferred.done,不從函數返回
- 22. Matlab函數切換返回/不返回
- 23. C++停止函數,不返回任何東西
- 24. 如何從函數中返回值?
- 25. 如何從函數中返回對?
- 26. 如何從jQuery函數中返回值?
- 27. 如何在類中返回False函數?
- 28. 如何從lambda函數中返回?
- 29. 函數中如何返回mysql_fetch_array
- 30. 如何返回函數中的Ajax值?
操作系統神奇。 'abort'將控制權交給操作系統,操作系統終止您的進程 – litelite
因爲它關閉了程序。會有什麼回報? – AntonH
exit()函數永遠不會返回(如果你使用C99和C11標準,也不使用'_Exit()'或'quick_exit()',也不會返回POSIX中的'_exit()')。 –