1
#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 产生 NOT 错误的代码的代表代码

但它应该,不是吗?

我的意思是函数的两种情况都有返回类型指针。

而在身体的尽头,什么也没有返回。那不合法是吗?但是代码可以编译,更有趣的是:当函数被调用并运行到函数体的末尾时,它正在返回0x80808080.

这可能是由我的代码中未定义的行为引起的吗?

或者这只是一个 gcc 错误?

或者我可以做一些不同的错误吗?

4

1 回答 1

5

在 C 中,return 语句是可选的,甚至对于返回类型不是 的函数也是如此void

如果调用者尝试读取函数的返回值并且函数没有返回任何内容,则行为未定义。

在 C99 中,如果main函数没有 return 语句,那么到达}函数的 就好像有一个return 0;语句。

于 2013-11-10T13:30:20.337 回答