2009-03-24 2 views
1

getche() 함수는 프로그램을 제대로 종료하지 않으므로 exit (int status) 함수를 시도하려고합니다. Turbo C++ 프로그래밍 언어는 어떻게 작동합니까? 관련 도움말 모듈의 설명을 이해할 수 없어보다 나은 설명을 원합니다 ... 예 : 함수의 매개 변수는 무엇으로 구성됩니까? 미리 감사드립니다!C++의 exit() 함수 정보

+0

"getche() 함수가 프로그램을 제대로 종료하지 않음"이란 무엇을 의미합니까? IIRC, getche()는 stdin에서 단일 문자를 읽습니다. 나는 그것이 프로그램을 나가는 것과 아무 관련이 없다고 생각한다. – rmeador

+0

getche (문자를 가져 오는)가 프로그램을 종료하는 이유는 무엇입니까? 그건 말이 안돼. –

답변

1

매개 변수는 프로세스의 종료 상태로 호출하는 셸로 다시 전달되는 정수 상태 코드입니다. 종료 자체는 프로세스를 종료하고 프로세스가 사용중인 모든 열린 자원을 정리해야합니다.

3

당신이 의미하는 바가 100 % 확실하지 않습니다. exit 함수에 대한 매개 변수 ("int status")는 쉘로 리턴되는 숫자입니다. 전통적으로 프로그램이 성공하면 0이고 프로그램이 어떤 이유로 실패하면> 0입니다. 이 함수는 여러 가지를 정리 한 다음 프로그램을 종료합니다.

1

Exit()의 매개 변수는 기존 프로세스의 이유 또는 상태를 나타내는 int입니다.

소년, 그게 좋지 않았어요. 나 다시 시도하자. 시작 프로세스 (CreateProcess() 또는 ShellExecute()를 사용하여 종료 한 프로세스)로 전달되는 값이거나 콘솔 응용 프로그램의 경우 값을 명령 쉘은 ERRORLEVEL을 통해 액세스 할 수 있습니다.

정상적으로 종료하는 경우 status = 0으로 설정하고, 오류 또는 문제를 나타 내기 위해 다른 값 (수신하는 프로세스에 원할 경우 의미가 있음)을 설정하는 것이 일반적입니다.

2

음. getch..과 같은 기능은 일반적으로 키보드 또는 표준 입력에서 문자를 가져옵니다. 그들은 때때로이

int main() { 
    // do many stuff... 
    // ... 
    getch(); 
} 

getch/getche 같은 프로그램의 끝 부분에 사용되는 다음 사용자에게 볼 수있는 변화를 제공하는 데 사용된다 (나는 전자는 터보 C++에서 무엇의 약자인지 모른다) 터미널 창 (일반적으로 창에서 발생)이 닫히기 전에 프로그램의 출력. C 및 C++에서 getchar이라 불리는 이식 가능한 함수가 있으며 그 작업도 수행합니다 (추가로 입력을 기다리지 만 여기서는 해를 입히지 않습니다).

그러나 프로그램을 종료하는 데는 사용되지 않습니다. 키를 누르고 나면 컨트롤이 계속되고 메인 완료 후에 프로그램이 존재합니다. C++과 최근의 C 버전은 주 함수의 마지막 문장 뒤에 암시 적으로 return 0;을 삽입합니다 (0은 "succesful"을 나타냄). 즉, 주 함수가 0 값을 OS에 반환합니다. 그러나 명시 적으로 반환 값을 쓰고 다른 값을 넣으면 다른 값을 반환 할 수 있습니다. 그 값은 exit이 기대하는 값입니다. 프로그램을 종료하고 주어진 값을 다시 OS로 리턴합니다.

int main() { 
    // some stuff... 
    exit(42); 
    // other stuff (note: never reached!) 
} 

이 프로그램은 42 값을 OS에 반환합니다. 일반적으로 당신은 단지 return 42;이고 그 효과는 똑같습니다 (*).


(*) 음, 완전히하지 : 로컬 변수를 가질 경우 exit를 사용하는 경우, 이들의 소멸자가 호출되지 않습니다. 그러나 그들은 깔끔하게 소멸되며 return n;을 사용할 때 소멸자가 호출됩니다. 그러므로 가능한 경우 메인에 return n;을 선호하십시오. 메인보다 다른 함수에서 호출 된 exit도 프로그램을 종료하므로 리턴은 단지 특정 함수에서 돌아올 것이고 프로그램을 전혀 종료시키지 않기 때문에이를 대신 사용해야 할 수도 있습니다.

+0

99 번 중 100 번 '소멸자'는 메모리를 해제하고 파일 핸들을 닫는 것에 관한 것입니다. 어쨌든 출구의 일부로 일어나는 일들. 정말 모든 것을 파괴해야한다면 atexit 핸들러를 적절히 등록하고 정말로 필요한 몇 가지 것들을 정리하십시오. –

+0

당신은 완전히 옳다고 생각합니다 (저는 주로 그것을 언급 했으므로 그 사실을 알고 있습니다). 그러나 우리는 기회가 있다면, 왜 처음부터 "옳은 일"을하지 않을까요 :) –

0

매개 변수는 프로세스의 종료 상태로 호출하는 쉘로 다시 전달되는 정수 상태 코드입니다. 종료 자체는 프로세스를 종료하고 프로세스가 사용중인 모든 열린 자원을 정리해야합니다. "종료"기능

"종료"기능에

0

추가 정보는 프로세스를 종료하는 정기적 인 청소를 수행 정상적으로 처리를 종료한다.

먼저 "atexit"에 대한 호출로 등록 된 모든 함수는 등록의 역순으로 실행됩니다. 그런 다음 모든 스트림이 닫히고 임시 파일이 삭제되고 마지막으로 제어가 호스트 환경으로 반환됩니다.

exit에 대한 인수로 제공된 값은 프로그램의 리턴 코드 또는 종료 코드로 운영 체제 (호스트 환경)에 리턴됩니다. 관례 상, 리턴 코드 0은 프로그램이 성공적으로 완료되었음을 의미합니다.

희망 사항은 의심의 여지가 없습니다.

관련 문제