C 从函数返回NULL或nothing
我有一些函数,我希望在失败时返回NULL,而在成功时,它们不需要返回任何东西。我一直在使用C 从函数返回NULL或nothing,c,C,我有一些函数,我希望在失败时返回NULL,而在成功时,它们不需要返回任何东西。我一直在使用void*function\u name(…),但它仍然要求我返回一些东西 我这样做的原因是作为PythonC扩展的一部分检测失败,他们建议最里面的函数设置任何异常,返回NULL,然后在堆栈中执行该操作 在这种情况下,最佳做法是什么?返回0,-1或类似的值?我建议返回int,如果成功返回0,如果失败返回一个负值,如-1,这将遵循许多库函数 优点是,通常有多种类型的故障,您可以返回不同的int来表示它们 另一
void*function\u name(…)
,但它仍然要求我返回一些东西
我这样做的原因是作为PythonC扩展的一部分检测失败,他们建议最里面的函数设置任何异常,返回NULL,然后在堆栈中执行该操作
在这种情况下,最佳做法是什么?返回0,-1或类似的值?我建议返回
int
,如果成功返回0
,如果失败返回一个负值,如-1
,这将遵循许多库函数
优点是,通常有多种类型的故障,您可以返回不同的int
来表示它们
另一方面,在
if
语句中使用函数似乎有点混乱。用纯C术语来说,最简单的方法是返回一个表示成功/失败的布尔标志
就与Python的集成而言,另一种方法是:
PyObject* func() {
...
if (error) {
/* set the exception */
PyErr_Format(PyExc_..., ...); /* TODO: fill in as appropriate */
return NULL;
}
/* return None */
Py_RETURN_NONE;
}
C中的许多函数返回0表示成功和成功!0表示失败;这是一个很好的开始,但一开始会显得有点奇怪
!!0可以在以后的某个日期增强为错误代码(或一些有用的数据,如返回strcmp以产生第一个差异的位置);保留0表示“确定”。在C语言中,不能使用布尔值true或false。但是返回1或0就可以了 但你可以这样做:
int yourFunction( ... )
{
...
if ( success )
return 1;
return 0;
}
甚至:
typedef int BOOL;
#define TRUE 1
#define FALSE 0
BOOL yourFunction()
{
if ( success )
return TRUE;
else
return FALSE;
}
或者按照另一个响应中的建议返回-1和0。或者,如果您希望在将来报告更精确的错误情况的可能性最小。返回一些枚举。