无法理解这段C代码片段

标签 c for-loop int printf short

我的代码是:

#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>=-1i > 0表达式没有副作用。

现在控制表达式是++i ,表示循环执行到 ++i评估为 0 .

ishort反对++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/

相关文章:

c - gcc : Segmentation fault when it executes "stosb" 中的扩展 asm

c++ - 十进制转二进制C++

java - 尝试将字符串转换为整数

java - 嵌套的 For 循环不工作 Java

python - 初学者应该如何完成编程任务?

java - 如何让打乱后的数字不等于原来的数字? ( java )

c++ - 缓存 C/C++ 程序中的值的命中/未命中

c - 带字符串和长的 fscanf

c - c 中的翻译器和预处理器相同吗?

带模数的 Python for 循环