我的朋友和我正在讨论这段代码:
#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
未初始化 ,但我的朋友认为它会。你怎么看?
答案 0 :(得分:5)
从语法的角度来看,该代码似乎完全有效。所以它应该是可编译的。
但是如果你试图运行它......它有很多未定义的行为,我就不再计算了。
i
未定义,未初始化。它在局部变量定义中完美定义。 C不是Java,变量不必明确初始化即可使用。
答案 1 :(得分:1)
应该没问题,因为你确实将i
声明为int变量。我通过编译器(GCC)编译了代码,看起来你的代码可以编译。我通过将一些整数替换为你的foo函数来运行它,它似乎返回整数很好。例如,foo(5)将产生2。