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)?

Kraken
fonte
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:

165

Tente usar em seu exit(0);lugar. A exitfunção espera um parâmetro inteiro. E não se esqueça de #include <stdlib.h>.

Klaus Byskov Pedersen
fonte
2
A página do manual diz "` O uso de EXIT_SUCCESS e EXIT_FAILURE é ligeiramente mais portável (para ambientes não UNIX) do que o uso de 0 e algum valor diferente de zero como 1 ou -1. `"
Mawg diz restabelecer Monica
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);

Tyler McHenry
fonte
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[])
Morfildur
fonte
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);
}
Bertrand Marron
fonte
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) ).

Nataraj Raja
fonte
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 ....

Martin max
fonte
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).

user4508201
fonte
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.

causa final
fonte
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.

Filvarga
fonte
-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.

Azeem Alvi
fonte
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.

Gaurav
fonte
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.

Muhammad Ahmad
fonte
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%.

Detamos
fonte
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