C出口的奇怪行为()

时间:2016-01-27 02:37:11

标签: c exit

我试图用一个退出号码退出我的主函数,但它总是以0退出。例如,代码:

printf("command exited with error: %i\n", commandExitError);
if(commandExitError > 0)
  exit(commandExitError);

if(openError > 0)
  exit(openError);
printf("I shouldn't see this if there was an error");
return 0;

有一种奇怪的行为,如果commandExitError为0,但openError为1,则它会以错误1退出。但是,如果commandExitError大于零,它仍会退出0!例如,这是commandExitError > 0的一些输出:

  

命令退出并显示错误:512

请注意,我们从未达到打印声明"我不应该看到这个......"然后,获取我的程序的退出状态,回显$?

  

0

我们看到我的程序仍然以0退出,尽管它应该以512清楚地退出。

2 个答案:

答案 0 :(得分:5)

根据man

  

exit()函数导致正常的进程终止,并将status & 0377的值返回给父进程

八进制377是十进制255

512 & 255 = 0

答案 1 :(得分:1)

我不确定任何标准是否定义了可能的退出代码范围,但GNU C库(作为示例)只接受0到255范围内的值。Reference