c - 在 C 中决定返回值的通用方法是什么?

标签 c linux function return-value

我的程序是用 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/

相关文章:

c - 在 C 中从函数返回 scanf 值

linux - 确定使用哪些选项编译 OpenSSH?

c - 解决这个识别功能?

c - FATFS : By using f_mkdir() function creating Unknown type file inside the folder

c - 堆栈上的局部变量和 EBP 之间是什么?

c - 如何计算两个字符串之间共有的不同字符的数量?

c++ - C++ 数组是通过引用传递还是通过指针传递?

python - 无法用python删除临时文件

java - Linux 如何将文件识别为某种文件类型,以及如何以编程方式更改它?

c - C函数中的全局变量和返回多个可变长度数组(指针)