这是使用while循环的程序,
#include <stdio.h>
int main()
{
int i;
i = 1;
while (i <= 32767)
{
printf("%d", i);
i = i + 1;
}
}
Run Code Online (Sandbox Code Playgroud)
你认为循环会无限期地执行吗?
那么它是有符号整数.考虑到如果int是16位,当值为INT_MAX或时,它将在一个点处精确溢出32767.那时它是未定义的行为.
它是未定义的行为 - 当int为16位时.由于行为未定义,我们不能说在这种情况下它总会无限运行等.
在您的系统中,如果
int是32位或更高位,则此程序的行为不是 未定义的.
从标准
...... 它们的实现定义值的大小(绝对值)应等于或大于显示的值,并带有相同的符号.
在您的情况下,如果sizeof(int) = 4或更高,循环将停止.知道行为是否未定义的唯一方法是知道大小int是多少.
int是32位或更高,那么这将停止.int是16位,那么这将是未定义的行为.它可能无限循环,也可能不循环.它没有被标准定义.