我在Cang中找不到退出代码的文档.

我还没能在官方的Clang Compiler User's Manual号中找到它

重要提示:这个问题是关于clang编译器的.我不是在问MSVC,它是一个不同的编译器.

推荐答案

据我所知,clang的退出代码没有记录.

所以,我试着从源头上找出原因.clangmain是 在名为的生成文件中 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命令行以查看确切的 它正在运行命令行来追踪神秘出口的来源 密码.

  • 42个例子:创建你自己的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).

  • 74的例子:对一个大文件运行clang -E(预处理),通过管道连接 输出到head,然后是echo $PIPESTATUS.

有可能还有其他我漏掉的 case ,就像上面提到的 主要通过手动从clang_main开始回溯发现,以及 有很多倒退的道路.但我认为这至少接近了 到全面性.

C++相关问答推荐

在C语言中使用scanf()时我无法理解的警告

使用NameSurname扫描到两个单独的字符串

如何在C宏中确定 struct 中元素的类型?

拥有3x3二维数组并访问数组[1][3]等同于数组[2][0]?

在C语言中,在数学运算过程中,为什么浮点数在变量中的行为不同

如何捕捉只有换行符或空格字符缓冲区的边缘大小写

==284==错误:AddressSaniizer:堆栈缓冲区下溢

将字符串数组传递给C中的函数:`str[dim1][str_size]`vs`*str[dim1]`

为四维数组中的Dim-1和Dim-3重新分配空间

Fprintf正在写入多个 struct 成员,并且数据过剩

C:Assignment中的链表赋值从指针目标类型中丢弃‘const’限定符

Fscanf打印除退出C代码为1的程序外的所有内容

带有数组指针的 struct 在print_stack()函数中打印随机数

区分MySQL C界面中的文本和BLOB字段

C:面筋蛋白';为什么不刷新窗口?

将char*铸造为空**

是什么阻止编译器优化手写的 memcmp()?

使用共享变量同步多线程 C 中的函数

clion.我无法理解 Clion 中发生的 scanf 错误

如何让 unlinkat(dir_fd, ".", AT_REMOVEDIR) 工作?