saída(1) em C++

Jinku Hu 12 outubro 2023
  1. Use a função exit para encerrar o programa C++ com código de status
  2. Use exit(1) para encerrar o programa C++ com código de status de falha
saída(1) em C++

Este artigo explicará como usar a função exit() em C++.

Use a função exit para encerrar o programa C++ com código de status

O programa em execução é geralmente chamado de processo em um sistema operacional e tem seu bucle de vida, que é representado como diferentes estados. Existem programas de longa duração, como servidores da web, mas mesmo aqueles precisam ser encerrados em algumas circunstâncias ou entregando o sinal do usuário. A terminação do processo pode ser chamada com a função exit(), que faz parte do padrão C e está incluída no C++. Leva um argumento inteiro que especifica o status de término do programa que pode ser lido do processo pai se o filho for aguardado.

O valor convencional do código de status de retorno bem-sucedido é 0 e qualquer coisa diferente de zero é considerada um código de erro, que pode corresponder ao cenário predefinido. Observe que há duas expressões macro chamadas EXIT_SUCCESS e EXIT_FAILURE para denotar os códigos de saída correspondentes passados ​​para a chamada exit. Geralmente, o programa tem vários fluxos de arquivos e arquivos temporários abertos, que são fechados ou removidos automaticamente quando a exit é chamada.

#include <unistd.h>

#include <iostream>

using std::cout;
using std::endl;

int main() {
  printf("Executing the program...\n");
  sleep(3);

  exit(0);
  //    exit(EXIT_SUCCESS);
}

Resultado:

Executing the program...

Use exit(1) para encerrar o programa C++ com código de status de falha

A função exit com o valor do argumento de 1 é usada para denotar o encerramento com falha. Algumas funções que retornam o valor de um código de status de chamada bem-sucedido podem ser combinadas com a instrução condicional que verifica o valor de retorno e sai do programa se o erro ocorreu. Observe que exit(1) é o mesmo que chamar exit(EXIT_FAILURE).

#include <unistd.h>

#include <iostream>

using std::cout;
using std::endl;

int main() {
  if (getchar() == EOF) {
    perror("getline");
    exit(EXIT_FAILURE);
  }

  cout << "Executing the program..." << endl;
  sleep(3);

  exit(1);
  // exit(EXIT_SUCCESS);
}

Resultado:

Executing the program...

Outro recurso útil da função exit() é executar funções especialmente registradas antes que o programa seja finalmente encerrado. Essas funções podem ser definidas como funções regulares e, para serem chamadas no encerramento, precisam ser registradas com a função atexit. atexit faz parte da biblioteca padrão e leva um ponteiro de função como o único argumento. Observe que várias funções podem ser registradas usando as várias chamadas atexit, e cada uma delas é chamada em ordem reversa quando a exit é executada.

#include <unistd.h>

#include <iostream>

using std::cout;
using std::endl;

static void at_exit_func() { cout << "at_exit_func called" << endl; }

static void at_exit_func2() { cout << "at_exit_func called" << endl; }

int main() {
  if (atexit(at_exit_func) != 0) {
    perror("atexit");
    exit(EXIT_FAILURE);
  }

  if (atexit(at_exit_func2) != 0) {
    perror("atexit");
    exit(EXIT_FAILURE);
  }

  cout << "Executing the program..." << endl;
  sleep(3);

  exit(EXIT_SUCCESS);
}

Resultado:

Executing the program...
at_exit_func2 called
at_exit_func called
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook