我很惊讶包含以下代码行的文件已成功编译,链接器生成可执行文件。除了返回类型为main
之外,我认为除return
之外的所有函数都必须有一个有效的void
语句。
int foo(){}
double bar(){}
int main(){}
我错过了什么?
答案 0 :(得分:8)
不从表示它的函数返回值是未定义的行为。它编译和链接,但不要指望程序正常运行。
如果使用高警告级别进行编译,编译器会告诉您相关信息。
答案 1 :(得分:2)
我认为除了
main
之外的所有函数都必须有一个有效的return语句,除非返回类型是void
。
是的,他们必须。如果他们不这样做,你将得到未定义的行为。
我错过了什么?
如果函数足够复杂,编译器很难或不可能判断所有返回路径是否返回值;所以编译器不需要诊断错误。
如果启用警告,大多数编译器会在许多情况下发出警告。