Uso da função exit ()


99

Quero saber como e quando posso usar a exit()função como o programa do meu livro:

#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");
}

Quando eu o executo, ele mostra ERROR: call to undefined function exit () .

Além disso, quero saber como posso criar uma opção para fechar a janela na qual o programa é executado. Por exemplo, fiz um programa baseado em menu que tinha várias opções e uma delas era "sair do menu" . Como posso fazer isso sair do programa (ou seja, fechar a janela)?


8
Se você quiser respostas, formate seu código e pergunta para que as pessoas possam lê-lo. E NÃO GRITE!

3
O formato do código é uma coisa, mas está mal escrito. Você não quer respostas assim, quer?
Kobi de

53
oy! gotos e sair? Meus olhos! Eles queimam!
Kyle

8
Não sou C-Expert nem posso escrever sem dificuldade, então posso estar errado sobre isso ... mas posso sugerir que você jogue esse livro fora? Usar goto em C é como ... tipo ... não sei. E se você me der licença agora, eles descobriram como abrir portas * hides.in.the.kitchen * ...
Bobby

8
Bem, goto ainda é uma sintaxe válida em C. Pode ser reprovada estilisticamente , mas ainda é válida. void main()OTOH está simplesmente errado . Assim como exit();está errado, e omitir #include <stdlib.h>é errado.
wildplasser

Respostas:



82

A exitfunção é declarada no cabeçalho stdlib, então você precisa ter

#include <stdlib.h>

na parte superior do seu programa para poder usar exit.

Observe também que isso exitleva um argumento inteiro, então você não pode chamá-lo como exit(), você deve chamar como exit(0)ou exit(42). 0 geralmente significa que o programa foi concluído com êxito e valores diferentes de zero são usados ​​como códigos de erro.

Existem também macros predefinidas EXIT_SUCCESSe EXIT_FAILURE, por exemplo,exit(EXIT_SUCCESS);


3
+1 por não apenas mencionar que exitleva um argumento inteiro, mas explicar por que leva um argumento inteiro e que alguns compiladores exigem o explícito #include <stdlib.h>.
Variadicismo de

As macros predefinidas mencionadas são definidas em tempo de compilação, não são?
carloswm85

11

exit(int code);é declarado em, stdlib.hentão você precisa de um

#include <stdlib.h>

Além disso:
- Você não tem nenhum parâmetro para o exit(), é necessário intfornecer um.
- Grave este livro, ele usa o gotoque é (para todos menos os hackers do kernel do Linux) ruim, muito, muito , MUITO ruim.

Editar:
Oh, e

void main()

é ruim também, é:

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

sim, está escrito no livro que é melhor você não usar goto bt para completar o livro estou apenas dando um exemplo ... então o livro não é tão ruim assim!
Kraken

5
gotoocasionalmente é a coisa certa a fazer (e o kernel do Linux fornece muitos exemplos disso, mas não é o único código que pode usá-lo). Mas o exemplo de OP claramente não é um desses casos, então sim, esse livro deveria ser queimado :).
Adam Rosenfield

11

Tente sair do homem .


Óh, e:

#include <stdlib.h>

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

Mais especificamente, tente "man 2 exit" em um console. Os documentos c são bem detalhados.
Justin

Certo, você está @Bertrand Marron
Justin

7

o exit() função é um tipo de função com um tipo de retorno sem um argumento. É definido pelo arquivo de cabeçalho stdlib.

Você precisa usar ( exit(0) or exit(EXIT_SUCCESS))ou (exit(non-zero)ou exit(EXIT_FAILURE) ).


4

O exemplo a seguir mostra o uso da exit()função.

#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;
}

Resultado

Início do programa ....
Saindo do programa ....


2

Você deve adicionar uma linha com #include <stdlib.h>para incluir esse arquivo de cabeçalho e exitdeve retornar um valor para atribuir algum inteiro em exit(any_integer).


2

Além de retornar um código de saída para o processo pai -

No UNIX, um aspecto importante que acho que foi deixado de fora é que exit () nas primeiras chamadas (na ordem reversa) todas as funções, que foram registradas pela chamada atexit ().

Consulte SUSv4 para obter detalhes.


1

em Unix como sistemas operacionais, a saída pertence ao grupo de chamadas do sistema. chamadas de sistema são chamadas especiais que permitem que o código do usuário (seu código) chame o código do kernel. portanto, a chamada de saída realiza algumas ações de limpeza específicas do sistema operacional antes de retornar o controle ao sistema operacional e encerra o programa.

#include <stdlib.h>

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

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

Alguns compiladores fornecerão o mesmo opcode de ambos os exemplos, mas outros não. Por exemplo, opcode da primeira função não incluirá nenhum tipo de opcode de posicionamento de pilha que será incluído no segundo exemplo como para qualquer outra função. Você pode compilar os dois exemplos e desmontá-los e verá a diferença.

Você pode usar a saída de qualquer parte do seu código e certificar-se de que o processo seja encerrado. Não se esqueça de incluir o parâmetro inteiro.


-2

Grave o arquivo de cabeçalho #include<process.h>e substitua exit();por exit(0);. Isso definitivamente funcionará no Turbo C; para outros compiladores, não sei.


1
<process.h> `não é padrão. A exitfunção é declarada em <stdlib.h>.
Keith Thompson

<process.h> não resolverá este problema. Você entendeu a pergunta que está sendo feita?
CuriousMind

-3

Prática de programação ruim. Usar uma função goto é um completo não não na programação C.
Também inclua o arquivo de cabeçalho stdlib.h escrevendo #include <iostream.h>para usar a exit()função. Lembre-se também de que a função exit () recebe um argumento inteiro. Use exit(0)se o programa foi concluído com êxito e / exit(-1)ou saiu da função com qualquer valor diferente de zero como argumento se o programa tiver erro.


1
<iostream.h>é específico para C ++ e não está relacionado ao <stdlib.h>cabeçalho que é realmente necessário. Os argumentos única portáteis à exitfunção são 0, EXIT_SUCCESSe EXIT_FAILURE. O uso de qualquer valor diferente de zero para denotar falha é específico para sistemas do tipo UNIX (e provavelmente alguns outros); não confie nele em código portátil.
Keith Thompson

-4

Inclua stdlib.hno seu cabeçalho e, a seguir, chame abort();em qualquer lugar onde deseja sair do programa. Como isso:

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

Quando o usuário entra, o switch aceita isso e passa para o caso 3 em que você chama a abortfunção. Ele sairá da tela imediatamente após pressionar a tecla Enter.


6
abortnão é a coisa apropriada para chamar aqui, ele não chamará atexitmanipuladores ou liberará buffers de arquivo abertos. Deve ser usado apenas para finalização anormal do programa, por exemplo, declarações falhadas, etc. Para finalização normal do programa, exitdeve ser usado.
Adam Rosenfield

-6

Use process.h em vez de stdlib e iostream ... Funcionará 100%.


4
Não sei o que é processo.h; certamente não é C padrão e não funcionará em sistemas que não o forneçam. O <iostream>cabeçalho é específico para C ++; a pergunta é sobre C.
Keith Thompson

1
Este não é o Yahoo! Respostas, é Stack Overflow. Se você responder, você precisa ter pelo menos testado primeiro!
wizzwizz4
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.