-1

在 C 中,当函数的返回类型为 sayint并且我没有在函数中包含返回调用时,我只会收到警告。

这可以接受吗?

int foo()
{
    int number = 0;
}

返回值是多少?

4

1 回答 1

5

标准第 6.6.3 节包括以下规则:

既没有表达式也没有花括号初始化列表的 return 语句只能用于不返回值的函数,即返回类型为 void、构造函数 (12.1) 或析构函数 (12.4) 的函数. 带有非 void 类型表达式的 return 语句只能用于返回值的函数;表达式的值返回给函数的调用者。表达式的值被隐式转换为它出现的函数的返回类型。return 语句可能涉及临时对象 (12.2) 的构造和复制或移动。带有花括号初始化列表的 return 语句通过指定初始化列表中的复制列表初始化 (8.5.4) 初始化要从函数返回的对象或引用。

从函数的末尾流出相当于没有值的返回;这会导致值返回函数中的未定义行为。

请注意,仅当函数的右大括号可访问时,这才是问题。如果执行总是采用具有 的分支,return {value}则没有问题。

于 2013-04-15T03:30:11.493 回答