#if _OWN_DEBUG_LEVEL > 0

    void *GetPostArgs(TYPE *Fcgx_Request, FILE *fpDebugPointer)

#else

    void *GetPostArgs(TYPE *Fcgx_Request)

#endif
{
    ...

    if (...)
    {
        return NULL;
    }

    ...

    do
    {
        ...

        if (...)
        {
            return NULL;
        }

        ...
    }
    while (...);

    if (...)
    {
        return NULL;
    }
}

这是一个表示代码的代码,使用gcc 4.3不会产生错误
但它应该,不是吗?
我的意思是这两个函数都有返回类型指针。
在尸体的尽头,什么也没有回来。
这不合法是吗?
但代码是编译的,更有趣的是:当函数被调用并运行到函数体的末尾时,它将返回0x80808080
这可能是由代码中未定义的行为引起的吗?
或者这只是一个gcc错误?
或者我可以做些不同的错误吗?

最佳答案

在C语言中,返回语句是可选的,甚至对于返回类型不是void的函数也是可选的。
如果调用方试图读取函数的返回值,但函数没有返回任何内容,则行为是未定义的。
在C99中,如果main函数没有return语句,那么到达该函数的}就好像有一个return 0;语句。

10-05 21:11
查看更多