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