【问题标题】:Strange Behavior of C exit() [duplicate]C exit() 的奇怪行为
【发布时间】:2016-05-03 20:13:53
【问题描述】:

我试图以某个退出号退出我的主函数,但它总是以 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,它仍然会以0 退出!例如,这是带有commandExitError > 0的一些输出:

命令退出错误:512

请注意,我们从未到达 print 语句“我不应该看到这个....”然后,获取我的程序的退出状态,回显 $?

0

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

【问题讨论】:

  • 请复制准确的终端命令和输出。
  • 退出值是一个 8 位数量 — 512 % 256 == 0。尝试 513、514、3、4、133、134 等。

标签: c exit


【解决方案1】:

根据man

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

八进制 377 是十进制 255

512 & 255 = 0

【讨论】:

  • 你比我快 30 秒 :( 不过答案很好 :)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 2019-04-10
    • 2019-05-24
    • 2016-07-15
    • 2011-06-23
    • 2016-08-12
    • 2013-10-28
    相关资源
    最近更新 更多