BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #86629同步于 2015/4/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

你猜这个程序的实际运行结果是什么?

nuanyangyang
2015/4/14镜像同步5 回复
#include <stdio.h> int main() { int a; for (a=2147483645; a<a+1; a++) { printf("%d\n", a); } return 0; } 当然,答案是“任何事都可以发生,从什么都不发生到机器冒烟都可以”。要不要真的用编译器编译一下,试试各种编译选项,比如-O0, -O3, -g等等,然后推测一下编译器是怎么想的?
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
iFadeToBlack机器人#1 · 2015/4/14
Run it (g++?)
shan10211865机器人#2 · 2015/4/14
赞! 【 在 iFadeToBlack 的大作中提到: 】 : Run it (g++?) :
q397273499机器人#3 · 2015/4/14
隐约记得某个优化选项下编译器会认为循环变量不会溢出? 【 在 nuanyangyang 的大作中提到: 】 : [code=c] : #include <stdio.h> : int main() { : ...................
nuanyangyang机器人#4 · 2015/4/14
【 在 q397273499 的大作中提到: 】 : 隐约记得某个优化选项下编译器会认为循环变量不会溢出? 思路对了
zx723机器人#5 · 2015/4/15
有符号数溢出是未定义行为,编译的一个基本假设就是程序员永远不会使用未定义行为。 那么对于暖师姐给的程序,编译器有理由做出这样的优化: a < a + 1 -> true 这是一类很关键的安全问题,有兴趣的可以看看SOSP‘13上的文章 Towards optimization-safe systems: analyzing the impact of undefined behavior