是否有C ++函数的默认返回值?

时间:2014-03-06 19:43:04

标签: c++ cygwin

我很惊讶包含以下代码行的文件已成功编译,链接器生成可执行文件。除了返回类型为main之外,我认为除return之外的所有函数都必须有一个有效的void语句。

int foo(){}
double bar(){}
int main(){}

我错过了什么?

2 个答案:

答案 0 :(得分:8)

不从表示它的函数返回值是未定义的行为。它编译和链接,但不要指望程序正常运行。

如果使用高警告级别进行编译,编译器会告诉您相关信息。

答案 1 :(得分:2)

  

我认为除了main之外的所有函数都必须有一个有效的return语句,除非返回类型是void

是的,他们必须。如果他们不这样做,你将得到未定义的行为。

  

我错过了什么?

如果函数足够复杂,编译器很难或不可能判断所有返回路径是否返回值;所以编译器不需要诊断错误。

如果启用警告,大多数编译器会在许多情况下发出警告。