使用EXIT_SUCCESS和EXIT_FAILURE作为您自己的库API中函数的返回值,可以被认为是合理的,良好的设计和良好实践吗?
示例软件是一个低级平台库,用于同一产品系列的多个产品中,适用于大量编译器和目标平台。开发团队在这个问题上存在分歧。一些开发人员认为将EXIT_SUCCESS和EXIT_FAILURE中定义的值重用为内部函数和库API中的返回值以表示库调用的成功或失败状态是一种好习惯。定义和使用自己的返回值将被视为" overdesign"。
其他团队成员认为EXIT_SUCCESS和EXIT_FAILURE明确设计为与exit()函数一起使用,并且直接用于其他目的是危险的。
您对此有何看法?
答案 0 :(得分:5)
关于stdlib.h中的宏的7.22:
EXIT_FAILURE
和
EXIT_SUCCESS扩展为整数常量表达式,可以用作退出函数的参数,分别向主机环境返回不成功或成功的终止状态;
这就是这些宏的用途。如果您的函数正在返回主机环境的状态,那么使用这些宏就可以了。将它们用于任何其他目的将是不好的做法,因为这不是它们的预期用途。
请注意,库的调用者不是“主机环境”(OS)。使用这些宏作为来自库的返回代码,将由其他程序员使用,这是不好的做法,因为这不是宏的用途。使用它们并不是危险,但它很草率而且非常令人困惑。
类似地,通常认为函数只是在成功/错误时返回true / false,因为它没有提供额外的错误信息。
定义和使用自己的返回值将被视为“过度设计”。
这是您实施专业图书馆的方式。事实上的行业标准是使用与可能发生的所有可能错误相对应的特定于库的枚举类型,然后让每个API函数返回该错误类型。这使得调用者更容易编写错误处理。每个函数都需要记录所有可能的返回码。