VS2013的奇怪行为

Strange behavior of VS2013

本文关键字:VS2013      更新时间:2023-10-16

最近我的程序在发布模式下崩溃,而在调试模式下运行良好。

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

我不确定这是否是编译器的缺陷(与2013相比(,因为它(可能(在函数末尾为我添加了return true语句,但在发布时并没有。因此,程序员将花费大量时间调试故障,尽管这应该归咎于程序员。

:(

从本应返回值的函数末尾流出是未定义的行为。未定义的行为意味着编译器可以执行任何操作,并且仍然是兼容的。发出警告消息是符合要求的。不发出警告信息是符合要求的。擦除硬盘:这也是合规的。幸运的是,这还没有发生。不幸的是,我多次援引未定义的行为。

这是未定义行为的一个原因是,在某些奇怪的情况下,流分析无法决定函数是否返回值。另一个原因是,您可能使用程序集设置返回值的方式在您的计算机上运行良好。第三个原因是编译器必须进行流分析才能做出这个决定;除非启用优化,否则许多编译器不会执行此操作。

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

你收到了一条警告信息却忽略了它——永远不要这样做。编译时将标志设置为合理的高级别,并处理每个警告。代码应始终编译干净。总是

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

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

结论:一旦他忽略了最后导致错误的警告,程序员就应该受到谴责;-(