在回答这个问题Unexpected exit status when using -pass-exit-codes in g++时,我意识到编译器指令的文档-pass-exit-codes
非常晦涩:
-pass-exit-codes 通常,如果编译器的任何阶段返回不成功的返回码,gcc 程序就会以 1 的代码退出。如果您指定 -pass-exit-codes,则 gcc 程序将返回任何返回错误指示的阶段产生的数值最高的错误。如果遇到内部编译器错误,C、C++ 和 Fortran 前端将返回 4。
这导致了“其他可能的错误代码是什么?”的问题。如果还有其他可能的错误代码,它们可能对程序员很有价值,因此他可以将它们用于编译自动化。
在遵循在 gcc 4.8.2 中定义和返回退出值的方式之后(https://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.bz2 ),看起来唯一可能的退出代码是0
( SUCCESS_EXIT_CODE
)、1
( FATAL_EXIT_CODE
) 和4
( ICE_EXIT_CODE
)。
现在,在 gcc 开发的问题跟踪系统(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=22600#c4)中,我们可以看到初始补丁3
被任意建议作为 ICE- 的返回值相关的退出代码。然后有人建议使用2
,除非2
已经使用了其他错误代码,并且它最终被分配4
给没有额外评论为什么4
选择。是否有错误代码 3 和 4?它们是干什么用的?
因为知道其他退出代码可能对使用 gcc/g++ 的程序员有益。是否有详细记录的 gcc 可能退出代码列表?如果没有,gcc 团队可能应该考虑将其添加到文档中。