在C语言中,退出码11的一般含义是什么?我查找了很多资料都没有找到确定的答案,所以想在这里问一下。当我尝试向一个向量添加元素时会出现此问题。
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);
exit(11)
,则可能会看到"退出代码2816"。printf
中所做的)。相反,应使用来自<sys/wait.h>
的W*
宏进行分析。 WIF *
宏找出发生的kind 类型,然后使用该信息来决定使用哪些其他 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
。