C中退出代码11的含义是什么?

C中退出代码11的一般含义是什么? 我环顾四周,无法找到明确的答案,所以我想我会问这里。 当我尝试向向量添加元素时。

你没有找到确定的答案,因为没有答案。 由程序的作者决定他们希望使用哪些退出代码。 标准C只表示exit(0)exit(EXIT_SUCCESS)表示程序成功, exit(EXIT_FAILURE)表示某种错误。 (从main返回一个值相当于使用该值调用exit 。)包括Windows,Linux,OSX等在内的大多数常见操作系统使用0表示成功,使用值1到255表示错误; 仍然在错误代码之间进行选择取决于应用程序编写者,值11并不是特别的。

在Linux和大多数其他Unix版本中, 信号编号11表示分段错误 ,正如Kerrek SB所述 。 当程序进行某种无效的内存访问时会发生分段错误,因此访问数组越界,或指针运算错误,或尝试访问空指针或其他与指针相关的错误都是合理的结果。 信号11与退出代码11不同:当程序由于信号而死亡时,它被标记为已经被信号杀死,而不是正常退出。 Unix shell通过报告退出代码来报告信号,退出代码是信号编号加上128,因此139表示分段错误。

其他答案错过了“退出代码”这一短语中可能存在的含糊之处。 我怀疑“退出代码”的含义是使用系统调用wait系列检索的状态代码,如:

 /* assume a child process has already been created */ int status; wait(&status); printf("exit code %d\n", status); 

如果您执行类似的操作,如果子进程发生段错误,您可能会看到“退出代码11”。 如果子进程实际上调用了exit(11)您可能会看到“退出代码2816”。

最好将这些东西称为“等待代码”或“等待状态”而不是“退出代码”,以避免与传递给退出的值混淆。 等待代码包含多个信息,这些信息一起打包成一个整数。 通常,您不应该直接查看整数(就像我在上面的printf所做的那样)。 您应该使用W*宏来分析它。

WIF*宏开始,找出发生了什么事情,然后使用该信息来决定使用哪些其他W*宏来获取详细信息。

 if(WIFEXITED(status)) { /* The child process exited normally */ printf("Exit value %d\n", WEXITSTATUS(status)); } else if(WIFSIGNALED(status)) { /* The child process was killed by a signal. Note the use of strsignal to make the output human-readable. */ printf("Killed by %s\n", strsignal(WTERMSIG(status))); } else { /* ... you might want to handle "stopped" or "continued" events here */ } 

没有标准定义应用程序在某些情况下必须设置哪些退出代码。 这完全取决于程序员哪个退出代码表示哪个错误甚至成功!

有时程序员决定任何不同于零的值都表示错误,有时这个值等于操作系统错误代码。

在Windows退出时, 可能会因为文件问题而使用代码11。 如果你想要这个错误代码的描述(特定于Windows而不一定是你的应用程序)运行net helpmsg 11