當assert()
調用失敗時,使用的退出代碼是什麼,它在哪裏記錄?當assert()失敗時,程序退出代碼是什麼?
回答
C99標準規定,assert
電話abort
和abort
東西,指出這對返回代碼:
的狀態實現定義的形式不成功的終止是由函數的方式返回給主機環境呼叫加註(SIGABRT)。
它記錄在c99標準here的7.2.1.1節(斷言)和7.20.4.1(中止)中。
許多UNIX系統將返回128加上信號編號(SIGABRT是信號編號6),因此您可能會得到134.無論您得到什麼,它都應該由C實現記錄。
例如,請參閱gcc的here。儘管對於返回到呼叫環境的內容仍然保持沉默。從特定部分here:
有些選擇是由庫和操作系統(或爲獨立環境編譯時的其他環境)進行的;有關詳細信息,請參閱其文檔。
而且here:
大部分這些點的行爲依賴於C庫的實現,而不是通過GCC本身定義。
那麼,在程序終止(特別是退出狀態位)glibc的DOCO here。它提到慣例,但沒有堅定的規則。
它是特定於實現的。你可以這樣做:
int main()
{
assert(0);
}
然後運行它:
> ./a.out
> echo $?
1 (<- or whatever)
這至少會告訴你什麼期望您的設置。我使用gcc和g ++在幾個linux盒子上使用gettitng 134。
您應該始終回答具體參考標準的答案。 – wilhelmtell 2010-05-19 04:04:00
編譯器並不總是遵循T的標準。(我在看你微軟)雖然知道標準所說的內容是很好的,但知道編譯器真正做什麼也是同樣好的。他們應該做的並不總是他們實際做的。這和標準實際上並不是免費的。 – 2013-10-14 04:32:46
我正在與posix消息隊列我有同樣的錯誤mq_open失敗errono 38(ENOSYS)。
工作的重點是在內核配置中啓用POSIX MESSGE QUEUE來重建kenel。
這將建立與POSIX消息隊列支持的內核,它爲我工作。
感謝
我想你的意思是把這個答案放在另一個問題上。 – 2010-05-19 10:25:58
我無法找到實際的規範它(POSIX是一種很難搜索),但我沒有找到一個參考。
拋出的斷言導致退出狀態與EXIT_FAILURE
擴展爲(reference)的任何狀態相同。由於您正在處理Linux,因此您也正在處理POSIX,它進一步定義了c99中的行爲。
- 1. XCode叮噹失敗,退出代碼254
- 2. 驗證失敗時退出javascript代碼
- 3. ActiveX插件導致ASSERT在VS2008中的應用程序退出時失敗
- 4. 當C++ DLL程序退出時:運行時檢查失敗#2
- 5. 爲什麼不遠程遠程失敗時退出?
- 6. Hadoop mapreduce程序失敗,退出代碼127
- 7. Xcode - 共享應用程序 - PackageApplication失敗,退出代碼1
- 8. 爲什麼gdb總是給「程序退出代碼01」?
- 9. Delphi應用程序的退出代碼250477278是什麼意思?
- 10. 爲什麼這個Assert失敗?
- 11. 爲什麼「assert 211 == 211」失敗?
- 12. Phonegap構建失敗,退出代碼2
- 13. Phonegap:命令失敗,退出代碼8
- 14. 命令失敗,退出代碼ENOENT
- 15. gcc-4.2退出代碼1失敗iphone
- 16. swiftc失敗,退出代碼1
- 17. copyplist失敗,退出代碼71
- 18. libtool失敗,退出代碼爲1
- 19. 鐺失敗退出代碼1
- 20. 鏈接器失敗,退出代碼1.
- 21. Xcode:gcc-4.2失敗,退出代碼1
- 22. copypng失敗,退出代碼爲1
- 23. 失敗,退出代碼245的Xcode
- 24. nimblekit失敗,退出代碼1錯誤
- 25. 命令copypng失敗,退出代碼71
- 26. 鐺失敗退出代碼1
- 27. GenerateDSYMFile:dsymutil失敗,退出代碼爲11
- 28. ibtool,退出代碼255失敗,當我使用的UIDatePicker
- 29. RestKit失敗,錯誤鐺失敗,退出代碼爲1
- 30. 程序退出代碼-SomeNumber
這是一個很好的答案,而134正是我所得到的。 – 2010-05-19 05:30:57
鏈接到GCC的文檔似乎不包含任何感興趣的內容,也不能找到您所做的報價。 – 2010-05-19 05:35:11
你可能會改變glibc doco鏈接直接指向這裏,除非我錯過了一些東西? http://www.gnu.org/s/libc/manual/html_node/Exit-Status.html#Exit-Status – 2010-05-19 05:35:52