我有一些函数,我希望在失败时返回NULL,并且在成功时他们不需要返回任何东西。我一直在使用void * function_name(...)
,但它仍然要求我返回一些东西。返回NULL或者没有任何功能
的原因,我这样做是为了检测故障为Python C扩展的一部分,他们推荐最里面的功能设置任何异常,返回NULL,然后做了通过堆栈。
这种情况下的最佳做法是什么?返回0,-1或类似的东西?
我有一些函数,我希望在失败时返回NULL,并且在成功时他们不需要返回任何东西。我一直在使用void * function_name(...)
,但它仍然要求我返回一些东西。返回NULL或者没有任何功能
的原因,我这样做是为了检测故障为Python C扩展的一部分,他们推荐最里面的功能设置任何异常,返回NULL,然后做了通过堆栈。
这种情况下的最佳做法是什么?返回0,-1或类似的东西?
在成功ç返回0许多功能,0失败;这是一个很好的开始惯例,但起初可能会显得有些奇怪。 !
0可以提高错误在稍后的日期代码(或类似的strcmp产生第一差值的位置的返回一些有用的数据);确定为0。
我建议返回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中,所以不能使用BOOLEAN 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,因为它是在暗示另一种回应。
或者,如果你希望报告在未来更精确的错误条件最薄的机会。返回一些枚举。 – StoryTeller