c - C程序中的函数格式

标签 c function

我正在编写一些在 C 语言中操作字符串并返回字符串摘录的函数。

您对函数返回值的良好样式有何看法。

引用Steve McConnell's Code Complete (1993 版第 5.8 节)他建议我使用 以下格式:

void my_function ( char *p_in_string, char *p_out_string, int *status )

我正在考虑的备选方案是:

返回函数的结果(选项 2)使用:

char* my_function ( char *p_in_string, int *status )

返回函数的状态(选项 3)使用:

int my_function ( char *p_in_string, char *p_out_string )

在上面的选项 2 中,我将从 my_function 返回一个局部变量的地址,但我的调用函数会立即使用该值,所以我认为这是可以的,并假设内存位置没有被重用(纠正我这个如果我错了)。

这取决于个人风格和偏好还是我应该考虑其他问题?

最佳答案

选项 3 几乎是不言而喻的(?)行业标准。如果一个返回整数的基于 IO 的 C 函数,返回一个非零整数值,这几乎总是意味着 IO 操作失败。您可能想引用 this Wikibook's section关于 C/C++ 中的返回值。

人们之所以用0表示成功是因为成功只有一个条件。然后,如果它返回非零值,您将以某种方式查找非零值表示 的错误。例如,1 表示它无法分配内存,2 表示参数无效,3 表示存在某种 IO 错误。从技术上讲,通常您不会返回 1,但您会返回 XXX_ERR_COULD_NOT_MALLOC 或类似的东西。

此外,never return addresses of local variables .除非您亲自 malloc 编辑它,否则无法保证从函数返回后该变量的地址。阅读链接了解更多信息。

关于c - C程序中的函数格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1287362/

相关文章:

从相对路径创建目录和加载文件

javascript - 后台函数javascript

c - 为什么这段代码从 fork 开始执行 printf 8 次?

c - 使用 strtok 读取 csv 文件

c - 为什么临时 char** 参数是非法的?

r - R 中的 `qr.qy()` 函数

c - 定义函数并传递结构值

c - 将无符号字符数组作为参数传递 - 数组未正确传递

c - c中的结构问题

c - 行尾奇怪的 sscanf 行为