这段代码没有抛出异常或退出但无限运行,为什么?

This code didn't throw an exception or exit but runs infinitely why?

我正在尝试一个实验,我希望这段代码抛出异常或为 n 打印不明确的值并退出,但它最终会无限地 运行。为什么它会无限运行?

#include <stdio.h>
 
int main() {

    int y=5;
    int n=4;

    while(y || n) {
        printf("n = %d y = %d\n",n,y);

        y--;
        n--;
    }

   return 0;
}

沿着 yn 的循环 运行 是 non-zero。

要终止循环,yn 在循环顶部都必须为零,但这永远不会发生,因为 yn 开始时彼此不相等,并且每次迭代中每个都下降一个。

另请注意,有符号整数 overflow/underflow 是 未定义的行为 ,因此如果您 运行 循环足够长以致于发生这种情况,则无法保证关于将会发生什么。