c语言 - 不应该是一个返回类型但没有返回的函数是错误的吗?


#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 中,return 语句是可选的,即使对于返回类型不void的函数也是如此。

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

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

最新更新