我和朋友们正在为这段小代码争论:
#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
是未初始化,但我的朋友们认为它会被编译。你觉得怎么样?
从语法角度来看,该代码似乎完全有效。所以它应该是可编译的。
但如果你试着运行它……它有太多未定义的行为,以至于我停止了计数。
i
不是未定义的,而是未初始化的。它在局部变量定义中得到了完美的定义。C不是Java,变量不必经过明确的初始化就可以使用。
应该没问题,因为您确实将i
声明为int变量。我通过我的编译器(GCC)编译了您的代码,看起来您的代码可以编译。我通过将一些整数代入你的foo函数来运行它,它似乎很好地返回了整数。例如,foo(5)将产生2。