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

时间:2013-12-18 01:54:08

标签: 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;
}

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

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:1)

应该没问题,因为你确实将i声明为int变量。我通过编译器(GCC)编译了代码,看起来你的代码可以编译。我通过将一些整数替换为你的foo函数来运行它,它似乎返回整数很好。例如,foo(5)将产生2。