C 从函数返回NULL或nothing

C 从函数返回NULL或nothing,c,C,我有一些函数,我希望在失败时返回NULL,而在成功时,它们不需要返回任何东西。我一直在使用void*function\u name(…),但它仍然要求我返回一些东西 我这样做的原因是作为PythonC扩展的一部分检测失败,他们建议最里面的函数设置任何异常,返回NULL,然后在堆栈中执行该操作 在这种情况下,最佳做法是什么?返回0,-1或类似的值?我建议返回int,如果成功返回0,如果失败返回一个负值,如-1,这将遵循许多库函数 优点是,通常有多种类型的故障,您可以返回不同的int来表示它们 另一

我有一些函数,我希望在失败时返回NULL,而在成功时,它们不需要返回任何东西。我一直在使用
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。

或者,如果您希望在将来报告更精确的错误情况的可能性最小。返回一些枚举。