如果void类型函数什么都不返回会发生什么
What happens if void type function returns nothing?
假设我们有这样的函数
void test() {return;}
这是正确的C代码吗?我刚刚在mingw中测试了它,编译器什么也没说,也是如此
void test() {return 1;}
所以我想我的编译器真的过时了。
在给定的情况下,在C/C++中应该发生什么?
编辑:
return 1;
向我发出警告。这是否意味着return;
是正确的?
C++11(ISO/IEC 14882:2011)§6.6.3返回语句
不带表达式的返回语句只能用于不返回值的函数,即返回类型为void、构造函数或析构函数的函数。具有非void类型表达式的return语句只能在返回值的函数中使用
C11(ISO/IEC 9899:201x)§6.8.6.4返回语句
带有表达式的return语句不应出现在返回类型为void的函数中。没有表达式的返回语句只能出现在返回类型为void的函数中。
然而,C89/C90仅对其一半进行了限制:
C89/C90(ISO/IEC 9899:1990)§3.6.6.4返回语句
带有表达式的return语句不应出现在返回类型为void的函数中。
在C11转发部分,它列出了第三版(即C11)和第二版(即C99)中的所有主要更改。最后一个是:
第二版的主要变化包括:
--在返回值的函数中不允许无表达式返回(反之亦然反之亦然)
这意味着自C99以来,函数返回类型的约束变化发生了变化。
Void不返回任何内容,因此其明显的编译器不会执行任何操作。如果您想返回一个值,您必须定义类型,无论是int、指针节点等。
但是,如果您想在return语句中提供一个表达式,那么您应该考虑:
return (void)(expr);
这里,expr
是您想要包含以具有side-effects
的任何表达式。作为一个建议,如果你想为它的副作用放置一个语句,那么你应该把它放在return语句之前,如下所示:
expr;
return;
- 什么时候在C++中返回常量引用是个好主意
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 我可以使用什么来停止循环而不是"返回 0"?
- 这个返回元素位置的基于循环的函数有什么问题?
- 查找不存在的键时,unordered_map返回什么
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 将传入的网络"char*"数据转换为"uint8_t"并返回的安全方法是什么?
- 如果我在 const 函数上使用指针,我可以返回什么?
- 基本的 c++ 问题:如果我在函数中创建某些内容并返回它会发生什么?
- 什么 /可以/ 你从一个函数返回. 并期望它在到达时还活着?
- 使用枚举作为条件,if 条件将返回什么,真或假?
- 当我使用 void 函数的返回值(通过强制转换函数指针)时,究竟会发生什么?
- 返回引用实例和非引用实例(return mystr & vs mystr)之间的区别是什么?
- 我应该返回什么而不是标准::shared_ptr<>&?
- 返回类型在 C++ OOP 中是什么意思
- 什么 & 返回左值或右值?
- 实际上什么返回类型有一个新的
- 链表缓冲区;应该插入什么返回
- 指针赋值应该使用什么返回类型?