我的代码是:
#include<stdio.h>
main() {
short int i=0;
for(i<=5 && i>=-1; ++i; i>0)
printf("%d, ",i);
return 0;
}
输出:-
我不知道它从哪里开始,但以序列结束
..., -4, -3, -2, -1
你能帮我理解这段代码的工作原理吗?
最佳答案
for(i<=5 && i>=-1; ++i; i>0)
相当于:
for(; ++i;)
因为i<=5 && i>=-1
和i > 0
表达式没有副作用。
现在控制表达式是++i
,表示循环执行到 ++i
评估为 0
.
i
是 short
反对++i
相当于 i = (int) i + 1
.
何时 (int) i + 1
转换为short
对象i
并且该值无法用 short
表示,转换是实现定义的(参见 C99,6.3.1.3p3)。
在您的实现中,行为是当该值无法在 short
中表示时,它只是环绕并变成一个巨大的负值( SHRT_MIN
)。循环重复执行,直到 ++i
控制表达是0
.
关于无法理解这段C代码片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13210349/