2011-12-03 84 views
-3

这段代码编译得很好,但是当我尝试运行它时,它失败了。C中的按位运算

int main(int argc, char** argv) { 
    int c = 4; 
    int b = 5; 
    int a = a & b; 
    printf(a); 

    return (EXIT_SUCCESS); 
} 

我在做什么错?

+1

你不定义'test'功能,或者你不叫'func'。 –

+1

“它失败”非常模糊。它在做什么?你期望它做什么? – abelenky

+0

除了已经提到的所有其他的东西,如果'func()'应该检查'x'是否是2的幂,那么你需要检查'x'的负值以便捕获它是'INT_MIN'。 –

回答

4

printf的第一个参数是格式字符串,char*。有关构造格式字符串的更多信息,请阅读this

printf(a); 

应该是:

printf("%d", a); 

否则a将作为字符串的开头的地址进行处理,当它的间接引用导致未定义的行为(有它会崩溃的好机会)。

此外,我假设上述代码不是您正在讨论的确切代码,因为它不会按原样编译。

2

printf需要char *, ...而不是int。我觉得你的代码应该是:

printf("%d", a); 

而且,你的函数名,testfunc,不匹配。但我不认为这是问题:)

3

不知道你到底想做什么,你的程序实际上会失败(编译和运行时)。

  1. 没有头文件,所以return (EXIT_SUCCESS);会给编译错误。
  2. printf(a);是错误的,没有格式说明符。实际上应该是printf("%d",a);
  3. 没有前向声明int func(int x)
  4. 最后看来你想叫func但最终调用test