2009-11-09 3 views
0

저는 C 언어를 배우고 xCode를 사용하고 있습니다 (중요한지 확실하지 않음). 이 코드 :반환 값에 대한 기본적인 C 질문

#include <stdio.h> 

int main (int argc, const char * argv[]) { 
    int myInt; 
    myInt = 2; 
    myInt *= ((3*4)/2) - 9; 
    printf("myInt = %d", myInt); 
    return myInt; 
} 

출력이 :

Session started at 2009-11-09 15:51:15 -0500.] 
myInt = -6 
The Debugger has exited with status 250.The Debugger has exited with status 250. 

의 printf 오른쪽이지만, 반환에 대한 어떤 것은보기)

A)가 그 아래에 포장하고, 그리고

B 결과 두 번? (명확히하기 위해, 만약 내가 return 0;을 입력하면 "debugger has exited"라인을 한 번만 출력하고 값은 0으로 출력한다.)

고마워!

+0

출력 결과가 실제로 출력됩니다 (status ...와 함께 종료 됨). 그게 내 질문의 일부 야. 고마워. –

+0

xCode는 아무 것도 모르지만 그게 무엇이든간에, 일부 특수한 용도로 사용하지 않는 한 main 함수가 myInt의 값을 반환하지 않는 것이 좋습니다. CProgramming.com에서 학습에 도움이되는 몇 가지 점잖은 튜토리얼이 있습니다. – ChadNC

답변

10

리턴 코드는 쉘에 의해 0-255 범위의 부호없는 정수로 해석됩니다.

+0

반환 코드가 바이트로 확실합니까? 어떻게 든 -1 반환 값을 얻는 것을 기억하며, 부호있는 정수 (32 비트 또는 64 비트 플랫폼에 따라)가 더 많이 동작한다는 것을 기억합니다.이 플랫폼은 반환 값의 절대 상한값과 하한값에 따라 다르다고 생각합니다. – Earlz

+0

Mac OS X (질문에 적용되는 것은'xcode' 태그가 붙어 있으므로) 반환 값은 부호없는 바이트입니다. 기술적으로 플랫폼에 의존 할 수 있다고 생각하지만, 필자가 사용했던 모든 유닉스 및 리눅스 시스템에서도 그렇게되었습니다. – mipadi

+0

필자는 OpenBSD 시스템에서이 파일을 테스트했으며 단지 바이트 값을 반환합니다. 어쩌면 Windows가 네거티브와 같은 것을 허용 할 수도 있습니다. – Earlz

0

I 엑스 코드 그런 경우에 00-FF (255) -6 = 250으로 종료 상태를 치료 가정은

유닉스
2

, 프로그램의 반환 값은 0 ~ 255의 범위 (에 한한다 예, main의 반환 유형은 int이지만 역사적인 예외입니다. exit status에 대한이 GNU 문서를 확인하십시오.

"디버거가 상태 250으로 종료되었습니다."라는 메시지는 명령을 실행중인 프로세스에서 발생하므로 제어 할 수 없습니다.

0

확인 exit()man page_Exit() :

두 함수는 하위에게 부모 프로세스에 사용할 수있는 상태 인수의 팔 비트를 만들 [...]

0

wrap under는 printf()에 대한 호출의 일부로 LF (줄 바꿈) 문자를 출력하지 못한 결과입니다. 인쇄 형식 문자열에 \ n을 추가하여 문제를 해결할 수 있습니다. 코드를 다음으로 변경하십시오.

#include <stdio.h> 

int main (int argc, const char * argv[]) { 
    int myInt; 
    myInt = 2; 
    myInt *= ((3*4)/2) - 9; 
    printf("myInt = %d\n", myInt); 
    return myInt; 
} 

두배로 '디버거가 상태 250에서 종료되었습니다.' 이는 IDE/디버거의 기능이며 코드의 결과는 아닙니다. 다른 것들이 설명했듯이, -6 = 0xFFFFFFFA는 8 비트로 잘라내어 부호없는 것으로 처리하면 10 진수로 250에 해당합니다.

0

-6은 메모리에 저장하기 위해 이진수로 6의 2의 칭찬으로 표시됩니다.

관련 문제