在 C 中无效的用户输入应该返回哪个错误号?
Which errno should be returned on invalid user input in C?
假设我有一个 C 语言程序,我要求用户输入一个 1 到 3 之间的数字。如果用户选择了范围之外的数字,errno 最适合 return 在我的函数中?
没有“最合适”的错误编号,本身。
0
表示没有错误。任何非 0
都意味着有错误。但是因为每个程序都是独一无二的,可能与该程序相关的错误也是独一无二的。
作为程序员,您确定错误代码的含义,并通过提供文档将其传达给最终用户。真的就是这么简单(而且灵活)。
我不会将 errno 用于这样一个简单的面向用户的功能。 errno 主要用于报告低级 I/O、进程和其他 OS 错误的系统调用。它不是为错误的键盘输入、不正确的文件内容或超出范围的值等问题而设计的。当它被用户库使用时,通常是在它们将内部系统错误转发给调用者并且不想费心创建一个不透明的错误机制来包装 errno 时。
例如,JSON 库或 TLS 加密库可能会转发它们执行的任何失败的 I/O 调用的 errno 值。多处理库可能会从失败的 fork/clone 系统调用转发 errno 值。
也就是说,如果你还想使用errno,EINVAL Invalid Argument
是合理的。
假设我有一个 C 语言程序,我要求用户输入一个 1 到 3 之间的数字。如果用户选择了范围之外的数字,errno 最适合 return 在我的函数中?
没有“最合适”的错误编号,本身。
0
表示没有错误。任何非 0
都意味着有错误。但是因为每个程序都是独一无二的,可能与该程序相关的错误也是独一无二的。
作为程序员,您确定错误代码的含义,并通过提供文档将其传达给最终用户。真的就是这么简单(而且灵活)。
我不会将 errno 用于这样一个简单的面向用户的功能。 errno 主要用于报告低级 I/O、进程和其他 OS 错误的系统调用。它不是为错误的键盘输入、不正确的文件内容或超出范围的值等问题而设计的。当它被用户库使用时,通常是在它们将内部系统错误转发给调用者并且不想费心创建一个不透明的错误机制来包装 errno 时。
例如,JSON 库或 TLS 加密库可能会转发它们执行的任何失败的 I/O 调用的 errno 值。多处理库可能会从失败的 fork/clone 系统调用转发 errno 值。
也就是说,如果你还想使用errno,EINVAL Invalid Argument
是合理的。