当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