不应该是具有返回类型的函数但是在体内没有返回是错误的吗?

时间:2013-11-10 13:28:51

标签: c c99 undefined-behavior return-type

#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 bug?

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

1 个答案:

答案 0 :(得分:5)

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

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

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