在玩代码时,我注意到一个奇怪的行为,我不知道解释背后的逻辑
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
从未初始化。
所以我的问题是为什么?这是未定义的行为吗?这不是一个,据说,标准代码?