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



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

#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。

最新更新