最近,我在发布模式下崩溃,而在调试模式下却无法正常运行。
通过深入检查我的代码,我发现我忘记return true
了函数的结尾,这会导致崩溃。如果失败,该函数应返回false,否则返回true。
我在徘徊这是否是编译器的缺陷(与2013年相比),因为它(也许)为我return true
在函数末尾添加了该语句,但是在发布时却没有。因此,程序员应该花很多时间来调试故障,尽管程序员应该对此负责。
:)
从应该返回值的函数的末尾流出是未定义的行为。未定义的行为意味着编译器可以执行任何操作并且仍然合规。发出警告消息是合规的。不发出警告消息是合规的。擦除硬盘驱动器:这也符合要求。对我来说幸运的是,这还没有发生。我经历了很多次调用未定义行为的不幸。
这是未定义行为的一个原因是,在某些奇怪的情况下,流分析无法确定函数是否返回值。另一个原因是,您可能已经使用汇编程序以一种可以在计算机上正常工作的方式来设置返回值。第三个原因是编译器必须进行流量分析才能确定。除非启用优化,否则许多编译器不会这样做。
也就是说,在右括号之前缺少返回值通常会触发编译器检查函数是否返回值。编译器发出警告时对您很好。
您收到警告消息并忽略了它-绝对不要那样做。使用设置为较高级别的标志进行编译,并处理每个警告。代码应始终编译干净。总是。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句