
文章来源: 更新时间:2024-08-30 06:30:08
当编译器优化遇上 UB(未定义行为),就会很有意思。
我这里分享某论坛上一个有名的例子——“颁++编译器证伪费马大定理”,侵删。
考虑以下程序 如果 13 行的方程在 1e9 内有解,函数就会返回,否则陷入死循环。
而根据费马大定理,该方程无解。
在无优化下,程序如预期陷入死循环;而在 O2 优化下,程序却正常退出了 这是因为,编译器认为函数一定会返回,而 31 行的 return 因为前面的死循环必然执行不到,所以编译器认定程序一定…。
地址:广东省广州市天河区88号电话:400-123-4657传真:+86-123-4567
版权所有: