如果void类型函数没有返回什么会发生什么

zar*_*cel 4 c c++

假设我们有这样的功能

void test() {return;}
Run Code Online (Sandbox Code Playgroud)

这是正确的C代码吗?我只是在mingw中测试它,编译器什么也没说,同样的

void test() {return 1;}
Run Code Online (Sandbox Code Playgroud)

所以我想我的编译器已经过时了.

在C/C++的特定情况下会发生什么?

编辑:

return 1;给我一个警告.这return;是否正确?

Yu *_*Hao 17

C++ 11(ISO/IEC 14882:2011)§6.6.3 返回语句

不带表达式的return语句只能用于不返回值的函数,即返回类型为void的函数,构造函数或析构函数.表达式为非void类型的return语句只能在返回值的函数中使用

C11(ISO/IEC 9899:201x)§6.8.6.4 返回声明

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

但是,C89/C90只限制了其中的一半:

C89/C90(ISO/IEC 9899:1990)§3.6.6.4 退货声明

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

在C11 转发部分,它列出了第三个(即C11)和第二个版本(即C99)中的所有主要变化.最后一个是:

第二版的主要变化包括:

...

- 返回没有表达式的返回不允许返回值的函数(反之亦然)

这意味着自C99以来函数返回类型的约束更改已更改.