为什么return语句适用于void作为C中的返回类型?

Piy*_*shM 1 c return function void c89

注意:我在代码块IDE上使用W​​indows 7和gcc编译器.

我发现如果函数的返回类型为void,则可以使用所有形式的return语句

例如:

void message() //If i skip this declaration still it works
main()
{
    message();
}
void message()
{
    return 5; //also return 5.0 and return a(some variable) also works
}
Run Code Online (Sandbox Code Playgroud)

因为,void指的是'什么都没有被返回',那么我们如何在这里使用return语句.这是否意味着所有程序都返回无论是无效还是其他返回类型?

我有一个关于void返回类型的查询:

如果我使用这个程序

main()
{
    printf("%d",message());
}

void message()
{
}
Run Code Online (Sandbox Code Playgroud)

它输出为1,

并且不会给出错误

但如果我使用它,我会收到错误:

void message(); //when I use the declaration

main()
{
    printf("%d",message());
}

void message()
{

}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Sou*_*osh 5

我对C89不是很确定,但在C11中,我可以在章节§6.8.6.4中看到

return带有表达式的语句不应出现在返回类型为的函数中void.[...]

因此,您的代码违反了标准.

关于第二部分,

  • 虽然缺少声明,由于现在过时的type-defaults-to-int property,它似乎有效,但它实际上调用了未定义的行为,因为,你提供了一个void类型作为int参数.

  • 虽然有一个前向声明(返回类型为void),但由于返回类型不匹配,错误很突出.

  • 同样的一句话也出现在C99标准中。 (2认同)