【发布时间】:2010-08-11 18:28:26
【问题描述】:
可能重复:
Help with C puzzle
该程序的目的是打印 20 次减号,但它不起作用。
#include <stdio.h>
int main()
{
int i;
int n = 20;
for( i = 0; i < n; i-- )
printf("-");
return 0;
}
【问题讨论】:
-
它给出了无限的减号...
-
@SurajRk 它实际上不会给出无限的。当 i = -2^31 尝试减少时,它最终会变成正数
-
只有 unsigned 算术被定义为由标准包装; signed 溢出是未定义的行为。因此允许编译器在这里发出一个真正的无限循环。例如,比较 gcc 4.4 与
-S -O2和-S -O2 -fwrapv对这个程序所做的事情。 -
@Zack +1 不知道 - 很高兴知道
-
@Zack:实际上,大多数通用计算机系统都会环绕。你不能指望它。根据标准,无限循环是完全可以的,任何其他行为也是如此。