我有一些函数,我想在失败时返回NULL,并且在成功时它们不需要返回任何内容。我一直在使用void * function_name(...)
,但它仍然需要我返回一些东西。
我这样做的原因是检测故障是python C扩展的一部分,他们建议最里面的函数设置任何异常,返回NULL然后通过堆栈执行。
在这种情况下,最佳做法是什么?返回0,-1或类似的东西?
答案 0 :(得分:5)
在纯C术语中,最简单的方法是返回一个表示成功/失败的布尔标志。
就与Python的集成而言,另一种方法是:
PyObject* func() {
...
if (error) {
/* set the exception */
PyErr_Format(PyExc_..., ...); /* TODO: fill in as appropriate */
return NULL;
}
/* return None */
Py_RETURN_NONE;
}
答案 1 :(得分:3)
C中的许多函数返回0表示成功,而0表示失败;这是一个很好的开始惯例,但最初看起来有点奇怪。
!0可以在以后增强到错误代码(或者一些有用的数据,比如strcmp的返回,产生第一个差异的位置);保留0表示确定。
答案 2 :(得分:1)
我建议返回int
,返回0
表示成功,返回负值-1
表示失败,这跟随了许多库函数。
优点是,通常有多种失败,您可以返回不同的int
来表示它们。
另一方面,使用if
语句中的函数似乎有点困惑。
答案 3 :(得分:0)
当您在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。