我看到在建议使用在互联网上有很多传统的软件和坏的教程exit(-1)
,return -1
或类似的表示“异常终止”。问题是,至少在POSIX中,该问题-1
从未存在过,并且不是有效的状态码。man 3 exit
说明了exit()
将的值返回status & 0377
给父对象,即-1
变为255
。在非POSIX系统上,EXIT_FAILURE
建议可移植。但是我从没看到“ -1表示异常终止”和“ EXIT_FAILURE可能不是1”,这表明他们清楚地相信“ -1”即使在非POSIX系统上也是常规的。
这是一个StackOverflow问题的例子,这个问题可以永久存在。软件“ unrealircd”也是exit(-1)
用于终止程序的程序示例。实际上,这使与的交互变得困难systemd
。
这种反模式是从哪里来的?在某些情况下有效吗?
1
“类Unix系统有一个严格的约定,退出状态为0表示成功,任何非零退出状态都表示失败...这个约定很难连接到Unix shell中……”(非零退出状态清洁出口)
—
蚊蚋
@gnat根据libc手册,退出状态明确为0到255(包括0和255)。如果某个地方的答案表明负值在某一点上是有效的,那我会接受,但是我发现这非常值得怀疑。
—
user222973 '16
@gnat“ 255”很容易放入
—
user222973 '16
unsigned char
。
@gnat“ Java”中的字节不是无符号字符,
—
user222973 '16
char
因为它的取值范围是-128到127 ,所以它更等效于a 。此外,我已经说过我的问题正文中将“ -1”转换为“ 255” 。