在 C 中,当函数的返回类型为 sayint
并且我没有在函数中包含返回调用时,我只会收到警告。
这可以接受吗?
int foo()
{
int number = 0;
}
返回值是多少?
标准第 6.6.3 节包括以下规则:
既没有表达式也没有花括号初始化列表的 return 语句只能用于不返回值的函数,即返回类型为 void、构造函数 (12.1) 或析构函数 (12.4) 的函数. 带有非 void 类型表达式的 return 语句只能用于返回值的函数;表达式的值返回给函数的调用者。表达式的值被隐式转换为它出现的函数的返回类型。return 语句可能涉及临时对象 (12.2) 的构造和复制或移动。带有花括号初始化列表的 return 语句通过指定初始化列表中的复制列表初始化 (8.5.4) 初始化要从函数返回的对象或引用。
从函数的末尾流出相当于没有值的返回;这会导致值返回函数中的未定义行为。
请注意,仅当函数的右大括号可访问时,这才是问题。如果执行总是采用具有 的分支,return {value}
则没有问题。