在玩代码时,我注意到一个奇怪的行为,我不知道如何解释背后的逻辑
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;
}
我希望printf
执行我们说的10
时间。然后我看到它继续运行(想象 100000 而不是 10)并假设开发人员(VS)解释了内部printf
(for
非常预期),因此输出是n
每次进入switch
.
但后来竟然j
从来没有初始化过。
所以我的问题是为什么?这是未定义的行为吗?这不是所谓的标准代码吗?