考虑一个Unix命令foo
,它逐行读取文件(或stdin
),其中每一行都应遵循特定的格式,例如{{ 1}}格式。
如果任何行不正确(但不是全部),终止状态应为/etc/passwd
还是EXIT_SUCCESS
?
我试过参考标准,
C11 Standard: 7.20.4.3 EXIT_FAILURE
功能
第5段
最后,控制权返回给主机环境。如果status的值为零或
exit
,状态成功终止的实现定义形式 回。如果状态值为EXIT_SUCCESS
,则为实现定义形式 返回状态不成功的终止。否则返回的状态是 实施德音响定义
我对上述内容的解释是“实现定义”意味着决定留给实施者。这种解释是否正确?
答案 0 :(得分:1)
你是正确的,决定由实施者决定。这取决于程序的使用方式。
例如,如果foo
在遇到格式错误的输入时因失败而终止,则foo
的用户可以编写一个shell脚本来检查其退出状态,并通过包含该内容的电子邮件向她发出警报stderr
。如果foo
成功终止,则无需发送电子邮件。
答案 1 :(得分:1)
C标准中的“实现定义”一词是指平台实现,不是单个应用程序的程序员。
这句话的意思是不同的平台可以对成功或失败如何传递到环境(例如shell)有不同的约定。实现还可以提供用于区分不同代码的失败的手段,这取决于导致它的原因。但是,这些代码可能无法在不同系统之间移植。
对于您作为程序员认为成功或失败的语义,您可以完全自由地为您的应用程序做任何适当的事情。