从函数返回NULL或什么都没有

时间:2013-06-26 14:03:23

标签: c

我有一些函数,我想在失败时返回NULL,并且在成功时它们不需要返回任何内容。我一直在使用void * function_name(...),但它仍然需要我返回一些东西。

我这样做的原因是检测故障是python C扩展的一部分,他们建议最里面的函数设置任何异常,返回NULL然后通过堆栈执行。

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

4 个答案:

答案 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。

相关问题