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

时间:2013-07-08 15:18:47

标签: c++ c

假设我们有这样的功能

void test() {return;}

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

也一样
void test() {return 1;}

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

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

编辑

return 1;给了我一个警告。这是否意味着return;是正确的?

3 个答案:

答案 0 :(得分: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以来函数返回类型的约束更改已更改。

答案 1 :(得分:0)

Void没有返回任何内容,因此它明显的编译器不会做任何事情。如果要返回一个值,则必须定义int,pointer node等类型等。

答案 2 :(得分:0)

没有表达式的return语句是从返回void的函数返回的正确方法。

但是,如果你想在return语句中提供一个表达式,那么你应该考虑:

return (void)(expr);

此处,expr是您要包含side-effects的任何表达式。作为建议,如果你想为其副作用放置一个声明,那么你应该把它放在return语句之前:

expr;
return;