关于C中的一段代码的争论

sty*_*tyx -4 c compiler-construction compiler-errors

我的朋友和我正在争论这段小代码:

#include <stdio.h>
#include <stdio.h>

int foo (int k) 
{
    int i, n;

    for (i = i ? 0 : i, n ^= n; i < sizeof(k) * 8;)
        n += k >> i++ & ~-2;
    return n;
}
Run Code Online (Sandbox Code Playgroud)

我怀疑它不会被编译,因为它i未初始化的,但我的朋友们认为它会.你怎么看?

rod*_*igo 5

从语法的角度来看,该代码似乎完全有效.所以它应该是可编译的.

但是如果你试图运行它...它有很多未定义的行为,我不再计算了.

i不是未定义的,它是未初始化的.它在局部变量定义中完美定义.C不是Java,变量不必明确初始化即可使用.