我的程序是用 C 为 Linux 编写的,并且有许多具有不同返回值模式的函数:
1) 一个或两个成功时返回n
,失败时返回-1
。
2) 一些成功返回0
,失败返回-1
。
3) 有些成功返回 1,失败返回 0(我通常拒绝使用 bool 类型)。
4) 指针在失败时返回 0
(我通常拒绝使用 NULL
)。
我对前三个感到困惑——返回指针的函数在失败时总是返回 0
,这很简单。
第一个选项通常涉及返回长度可能仅为正数的函数。
第二个选项,通常涉及命令行处理功能,但我不确定它是否正确,也许更好的值是 EXIT_SUCCESS 和 EXIT_FAILURE?
第三个选项适用于在条件下方便且自然地调用的函数,我通常在这里模拟 bool 类型,使用 int
值 1 和 0。
尽管这一切看起来都合理合理,但我仍然发现有些地方不太清楚或不明显,比如创建函数时使用哪种样式,或者当我想使用它时使用哪种样式。
那么,在此处决定返回类型时,如何使我的方法更加清晰?
最佳答案
So how can I add clarity to my approach when deciding upon return types here?
为每种返回类型选择一个模式并坚持下去,否则你会把自己逼疯的。根据长期以来为该平台建立的惯例对您的模式进行建模:
如果您正在进行大量系统调用,那么任何返回整数的函数都应在失败时返回
-1
。如果您不进行系统调用,您可以自由地遵循 C 控制结构的约定,即非零表示成功,零表示失败。 (我不知道你为什么不喜欢
bool
。)如果一个函数返回一个指针,失败应该通过返回
NULL
来指示。如果函数返回 float ,则应通过返回 NaN 来指示失败。
如果函数返回完整范围的有符号和无符号整数,您可能不应该在返回值中编码成功或失败。
返回值测试是 C 程序员的祸根。如果失败很少见并且您可以编写中央处理程序,请考虑使用 exception macro package可以使用 longjmp
指示失败。
关于c - 在 C 中决定返回值的通用方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2141856/