2013-06-26 30 views
2

我有一些函数,我希望在失败时返回NULL,并且在成功时他们不需要返回任何东西。我一直在使用void * function_name(...),但它仍然要求我返回一些东西。返回NULL或者没有任何功能

的原因,我这样做是为了检测故障为Python C扩展的一部分,他们推荐最里面的功能设置任何异常,返回NULL,然后做了通过堆栈。

这种情况下的最佳做法是什么?返回0,-1或类似的东西?

回答

3

在成功ç返回0许多功能,0失败;这是一个很好的开始惯例,但起初可能会显得有些奇怪。 !

0可以提高错误在稍后的日期代码(或类似的strcmp产生第一差值的位置的返回一些有用的数据);确定为0。

1

我建议返回int,返回0为成功,返回一个负值,如-1失败,这遵循许多库函数。

好处是,通常有多种故障,您可以返回不同的int来表示它们。

另一方面,使用if语句中的函数似乎有点困惑。

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; 
} 
+0

或者,如果你希望报告在未来更精确的错误条件最薄的机会。返回一些枚举。 – StoryTeller

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,因为它是在暗示另一种回应。