繁体   English   中英

VS2013的奇怪行为

[英]Strange behavior of VS2013

最近,我在发布模式下崩溃,而在调试模式下却无法正常运行。

通过深入检查我的代码,我发现我忘记在函数末尾return true ,这会导致崩溃。 如果失败,该函数应返回false,否则返回true。

我在徘徊这是否是编译器的缺陷(与2013年相比),因为它(也许)为我在函数末尾添加了return true语句,但是在发布时却没有。 因此,程序员应该花很多时间来调试故障,尽管程序员应该对此负责。

:)

从应该返回值的函数的末尾流出是未定义的行为。 未定义的行为意味着编译器可以执行任何操作并且仍然合规。 发出警告消息是合规的。 不发出警告消息是合规的。 擦除硬盘驱动器:这也符合要求。 对我来说幸运的是,这还没有发生。 我经历了很多次调用未定义行为的不幸。

这是不确定行为的一个原因是,在某些奇怪的情况下,流分析无法确定函数是否返回值。 另一个原因是,您可能已经使用汇编程序以一种可以在计算机上正常工作的方式来设置返回值。 第三个原因是编译器必须进行流量分析才能确定。 除非启用优化,否则许多编译器不会这样做。

也就是说,在右括号之前缺少返回值通常会触发编译器检查函数是否返回值。 编译器发出警告时对您很好。

您收到警告消息并忽略了它-绝对不要这样做。 使用设置为较高级别的标志进行编译,并处理每个警告。 代码应始终编译干净。 总是。

C和C ++是容忍的语言。 当程序员编写即使看起来很奇怪也可以编译的代码时,编译器会发出警告。 警告表示您正在写可能包含错误的内容,但是要做出决定

它允许自愿进行某些优化。 例如,您始终可以将2D数组用作1D数组,而在某些其他语言中则无法做到。 但是, 如果您不确定自己为什么要强迫编译器执行其不喜欢的操作,则对方永远不会忽略警告。

结论:只要他忽略了最终导致错误的警告, 程序员就应该责备;-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM