我在Cang中找不到退出代码的文档.
我还没能在官方的Clang Compiler User's Manual号中找到它
重要提示:这个问题是关于clang编译器的.我不是在问MSVC,它是一个不同的编译器.
我在Cang中找不到退出代码的文档.
我还没能在官方的Clang Compiler User's Manual号中找到它
重要提示:这个问题是关于clang编译器的.我不是在问MSVC,它是一个不同的编译器.
据我所知,clang
的退出代码没有记录.
所以,我试着从源头上找出原因.clang
的main
是
在名为的生成文件中
build/tools/clang/tools/driver/clang-driver.cpp
,它是从
llvm/cmake/modules/llvm-driver-template.cpp.in
.
打进了clang_main
个电话
clang/tools/driver/driver.cpp
.
在driver.cpp
以内,唯一明显的退出代码是0,表示成功,而
1表示错误.因此,对于大多数目的,这就是答案:0或1.
0的例子:提供clang
个正常输入.
示例1:输入clang
个带有语法错误或命令行
错误等.
然而,如果由clang
驱动程序执行的程序退出非零,
例如在链接时为ld
,则clang
将转发该代码.
因此,您可以从clang
获得任何退出代码,具体取决于
取决于它运行的程序做了什么.如果你看到不同的代码,这是
这可能就是为什么.将-v
添加到clang
命令行以查看确切的
它正在运行命令行来追踪神秘出口的来源
密码.
ld
,做exit 42
,并坚持下go
在PATH
号公路的前面.如果clang
发生崩溃或断言失败,那么后果是
系统特定的;在Linux上,这会导致进程死于
信号,shell 程序通常会将其映射到大于
128.但是,在大多数情况下,崩溃的进程是由
clang
号车手.然后,驱动程序检测到崩溃的子进程,并且
报告说使用退出代码1.
clang
输入
issue 65153.最后,有一个有点奇怪的例子:如果clang
收到SIGPIPE
,
然后它退出,代码EX_IOERR
来自sysexits.h
,在我的Linux上
系统是74.还有一个#define EX_IOERR 74
英寸的
llvm/Support/ExitCodes.h
个
对于没有sysexits.h
的系统(如Windows).
clang -E
(预处理),通过管道连接
输出到head
,然后是echo $PIPESTATUS
.有可能还有其他我漏掉的 case ,就像上面提到的
主要通过手动从clang_main
开始回溯发现,以及
有很多倒退的道路.但我认为这至少接近了
到全面性.