exit () 함수 사용


99

exit()내 책의 프로그램과 같은 기능 을 언제 어떻게 사용할 수 있는지 알고 싶습니다.

#include<stdio.h>

void main()
{
    int goals;
    printf("enter number of goals scored");
    scanf("%d",&goals);

    if(goals<=5)
        goto sos;
    else
    {
        printf("hehe");
        exit( );
    }
    sos:
    printf("to err is human");
}

실행하면 ERROR : call to undefined function exit () 표시 됩니다.

또한 프로그램이 실행되는 창을 닫는 옵션을 만드는 방법을 알고 싶습니다. 예를 들어, 몇 가지 옵션이있는 메뉴 기반 프로그램을 만들었는데 그 중 하나는 "메뉴 종료" 였습니다. 프로그램을 종료하려면 어떻게해야합니까 (예 : 창 닫기)?


8
답변을 원한다면 사람들이 읽을 수 있도록 코드와 질문의 형식을 지정하십시오. 그리고 소리 치지 마세요!

3
코드 형식은 한 가지이지만 잘못 작성되었습니다. 당신은 이런 대답을 원하지 않습니까?
Kobi

53
어이! gotos와 출구? 내 눈! 그들은 타오른다!
Kyle

8
저는 C 전문가도 아니고 어렵지 않게 쓸 수 없어서 제가 틀렸을 수도 있습니다.하지만 그 책을 버리라고 제안해도 될까요? C에서 goto를 사용하는 것은 마치 ...처럼 ... 모르겠습니다. 당신이 지금 실례 경우, 그들은 어떻게 열려있는 문을 알아 냈 * hides.in.the.kitchen * ...
바비

8
음, goto는 여전히 C에서 유효한 구문입니다. 스타일 적 으로 비 승인 될 수 있지만 여전히 유효합니다. void main()OTOH는 단지 명백한 잘못 입니다. exit();잘못된 것과 마찬가지로 생략 #include <stdlib.h>은 잘못된 것입니다.
wildplasser 2013-06-23

답변:



82

exit함수는 stdlib 헤더에 선언되어 있으므로

#include <stdlib.h>

를 사용할 수 있도록 프로그램 상단에 있습니다 exit.

또한 exit정수 인수를 사용하므로로 호출 할 수 없으므로 또는 exit()로 호출해야합니다 . 0은 일반적으로 프로그램이 성공적으로 완료되었음을 의미하며 0이 아닌 값이 오류 코드로 사용됩니다.exit(0)exit(42)

사전 정의 된 매크로 EXIT_SUCCESSEXIT_FAILURE, 예도 있습니다.exit(EXIT_SUCCESS);


3
exit정수 인수 를 취하는 것을 언급 할 뿐만 아니라 정수 인수 를 취하는 이유와 일부 컴파일러에서 명시 적 #include <stdlib.h>.
Variadicism

언급 된 미리 정의 된 매크로는 컴파일 시간에 정의됩니다. 그렇지 않습니까?
carloswm85

11

exit(int code);에 선언되어 stdlib.h있으므로

#include <stdlib.h>

또한 :
-에 대한 매개 변수가 없으므로 매개 변수를 제공 exit()해야합니다 int.
-이 책을 태워라. 그것은 goto(리눅스 커널 해커를 제외한 모든 사람에게) 나쁘고, 매우, 매우 , 매우 나쁘다.

편집 :
아, 그리고

void main()

또한 나쁘다.

int main(int argc, char *argv[])

그래 그 책에 쓰여진 것은 책의 완전성을 위해 goto bt를 사용하는 것이 좋습니다.
Kraken

5
goto때때로 옳은 일이 될 수 있습니다 (그리고 Linux 커널은 그에 대한 많은 예를 제공하지만 그것을 사용할 수있는 유일한 코드는 아닙니다). 그러나 OP의 예는 분명히 그러한 경우가 아니므로 예, 그 책은 태워야합니다 :).
Adam Rosenfield 2011 년

11

man exit를 시도하십시오 .


아, 그리고 :

#include <stdlib.h>

int main(void) {
  /*  ...  */
  if (error_occured) {
    return (EXIT_FAILURE);
  }
  /*  ...  */
  return (EXIT_SUCCESS);
}

보다 구체적으로 콘솔에서 "man 2 exit"를 시도하십시오. c 문서는 매우 상세합니다.
Justin

맞아요 @Bertrand Marron
Justin

7

exit()함수는 인수없이 반환 형식과 기능의 유형입니다. stdlib 헤더 파일에 의해 정의됩니다.

( exit(0) or exit(EXIT_SUCCESS))또는 (exit(non-zero)또는 을 사용해야 exit(EXIT_FAILURE) )합니다.


4

다음 예제는 exit()함수 의 사용법을 보여줍니다 .

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    printf("Start of the program....\n");
    printf("Exiting the program....\n");
    exit(0);
    printf("End of the program....\n");
    return 0;
}

산출

프로그램 시작 .... 프로그램
종료 ....


2

#include <stdlib.h>헤더 파일을 포함하려면 행을 추가 exit해야하며 값을 반환해야하므로 exit(any_integer).


2

종료 코드를 상위 프로세스에 반환하는 것 외에도-

유닉스에서 내가 빠뜨린 중요한 측면은 첫 번째에서 exit ()가 atexit () 호출에 의해 등록 된 모든 함수를 (역순으로) 호출한다는 것입니다.

자세한 내용은 SUSv4를 참조하십시오.


1

운영 체제와 같은 유닉스에서 exit는 시스템 호출 그룹에 속합니다. 시스템 호출은 사용자 코드 (귀하의 코드)가 커널 코드를 호출 할 수 있도록하는 특수 호출입니다. 따라서 종료 호출은 OS에 제어권을 반환하기 전에 일부 OS 특정 정리 작업을 수행하고 프로그램을 종료합니다.

#include <stdlib.h>

// example 1
int main(int argc, char *argv){
  exit(EXIT_SUCCESS);
}

// example 2
int main(int argc, char *argv){
  return 0;
}

일부 컴파일러는이 두 예제에서 동일한 opcode를 제공하지만 일부는 제공하지 않습니다. 예를 들어 첫 번째 함수의 opcode에는 다른 함수와 마찬가지로 두 번째 예제에 포함될 스택 포지셔닝 opcode가 포함되지 않습니다. 두 예제를 모두 컴파일하고 분해하면 차이점을 알 수 있습니다.

코드의 모든 부분에서 종료를 사용할 수 있으며 해당 프로세스가 종료되는지 확인하십시오. 정수 매개 변수를 포함하는 것을 잊지 마십시오.


-2

헤더 파일을 작성 #include<process.h>하고 교체 exit();와 함께 exit(0);. 이것은 Turbo C에서 확실히 작동합니다. 내가 모르는 다른 컴파일러의 경우.


1
<process.h>`는 비표준입니다. exit기능의 선언 <stdlib.h>.
Keith Thompson

<process.h>는이 문제를 해결하지 않습니다. 질문을 이해 했습니까?
CuriousMind

-3

잘못된 프로그래밍 관행. goto 함수를 사용하는 것은 C 프로그래밍에서 완전한 아니오입니다.
또한 함수 #include <iostream.h>사용을 위해 작성 하여 헤더 파일 stdlib.h를 포함하십시오 exit(). 또한 exit () 함수가 정수 인자를 받는다는 것을 기억하십시오. exit(0)프로그램이 성공적으로 완료된 경우 사용 exit(-1)하거나 프로그램에 오류가있는 경우 인수로 0이 아닌 값을 사용하여 함수를 종료합니다.


1
<iostream.h>C ++에만 해당되며 <stdlib.h>실제로 필요한 헤더 와는 관련이 없습니다 . 받는 유일한 휴대용 인수 exit기능은 0, EXIT_SUCCESS하고 EXIT_FAILURE. 오류를 표시하기 위해 0이 아닌 값을 사용하는 것은 UNIX 계열 시스템 (및 일부 다른 시스템)에만 해당됩니다. 이식 가능한 코드에 의존하지 마십시오.
Keith Thompson

-4

stdlib.h헤더에 포함시킨 다음 abort();프로그램을 종료하려는 곳에서 호출 하십시오. 이렇게 :

switch(varName)
{
    case 1: 
     blah blah;
    case 2:
     blah blah;
    case 3:
     abort();
}

사용자가 스위치를 입력하면이를 수락하고 abort함수 를 호출하는 케이스 3에 제공합니다 . Enter 키를 누르면 즉시 화면이 종료됩니다.


6
abort입니다 하지 여기에 전화, 그것은 호출하지 않습니다 적절한 것은 atexit핸들러 또는 플러시 열린 파일 버퍼를. 비정상적인 프로그램 종료 (예 : 실패한 주장 등)에만 사용해야합니다. 정상적인 프로그램 종료를 exit위해서는 사용해야합니다.
Adam Rosenfield 2011 년

-6

stdlib 및 iostream 대신 process.h를 사용하십시오 ... 100 % 작동합니다.


4
process.h가 무엇인지 모르겠습니다. 확실히 표준 C가 아니며이를 제공하지 않는 시스템에서는 작동하지 않습니다. <iostream>헤더는 C ++에 고유; 질문은 C에 관한 것입니다.
Keith Thompson

1
야후가 아닙니다! 답변, 스택 오버플로입니다. 대답하면 적어도 먼저 테스트를 거쳐야합니다!
wizzwizz4 dec.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.