小编dEm*_*gOd的帖子

for 循环在 switch case 之间拆分的行为

在玩代码时,我注意到一个奇怪的行为,我不知道解释背后的逻辑

void foo(int n)
{
    int m = n;
    while (--n > 0)
    {
        switch (n)
        {
            case -1:
            case 0:
                for (int j = 0; j < m; ++j)
            default:
                    printf(":-)");
                break;
        }
    }
}

int main()
{
    foo(10);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望printf执行比方说的10时间。然后,我看到它继续运行(想象一下100000,而不是10),并假定开发(VS)解释了printf 内部for(漂亮的预期),因此输出由n次,每次入口switch

但后来证明j从未初始化。

所以我的问题是为什么?这是未定义的行为吗?这不是一个,据说,标准代码?

c c++ duffs-device

22
推荐指数
4
解决办法
1965
查看次数

标签 统计

c ×1

c++ ×1

duffs-device ×1