2011-12-03 5 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

를 호출 결국 보인다. –

+1

"실패 함"은 매우 모호합니다. 뭐하는거야? 무엇을 기대합니까? – abelenky

+0

'func()'가'x'가 2의 거듭 제곱인지 아닌지를 검사해야한다면,'func()'가'x'의 음수 값을 검사하여 사건을 잡아야합니다 여기서 그것은 INT_MIN이다. –

답변

4

printf의 첫 번째 인수는 형식 문자열 char*입니다. 형식 문자열 구성에 대한 자세한 내용은 this을 참조하십시오.

printf("%d", a); 

그렇지 않으면 a은 문자열의 시작의 주소로 취급되며,이 역 참조 때 (이 충돌거야 좋은 기회가) 정의되지 않은 동작이 발생할 :

printf(a); 

이 있어야한다.

또한 위의 코드는 그대로 컴파일되지 않기 때문에 당신이 말하는 정확한 코드가 아니라고 가정합니다.

2

printfint이 아니라 char *, ...입니다. 난 당신의 코드가 있어야한다고 생각 :

printf("%d", a); 

또한, 함수 이름, testfunc가 일치하지 않습니다. 하지만 그게 문제라고 생각하지 않습니다.

3

정확히 무엇을하고 싶은지 모르면 프로그램이 실제로 실패합니다 (컴파일 및 런타임).

  1. 헤더 파일을 포함하지 않으므로 return (EXIT_SUCCESS);은 컴파일 오류가 발생합니다.
  2. printf(a);은 형식 지정자가 잘못되었습니다. 실제로 있어야 함 printf("%d",a);
  3. int func(int x)에 대한 전달 선언 없음.
  4. 마지막으로 당신이 func를 호출하고 싶었지만 당신은`test` 함수를 정의하지 않습니다, 또는 당신이 func``호출하지 않는 test