18. Encerrando seu programa
18.1 return
O comando return(VALOR) encerra uma função retornando VALOR para a função chamadora. Caso a função chamadora seja main() , o programa será encerrado e o valor retornado passado para o sistema operacional. Exemplo:
/* verificando o funcionamento de "return" */
#include <stdio.h>
int soma(int a, int b)
{
int resultado;
resultado = a + b;
/* "resultado" será passado a função chamadora
* no caso "printf" */
return(resultado);
}
int main()
{
int nr1,nr2,valor;
printf("Entre com o valor do primeiro número :");
scanf("%d",&nr1);
printf("Entre com o valor do segundo número :");
scanf("%d",&nr2);
/* Chamando a função soma. O comando "return"
* da função soma retornará "resultado" para
* aqui. */
printf("A soma dos dois é %d\n",soma(nr1,nr2));
printf("Entre com o valor a ser retornado para
o sistema operacional :");
scanf("%d",&valor);
printf("Em ambiente Linux, digite o comando shell\n\n");
printf("$ echo $?\n\n");
printf("Para ver o valor retornado pelo programa\n");
/* "valor" será retornado para o sistema operacional
* pois este foi a função chamadora de "main" */
return(valor);
}
|
18.2 exit
Ao ser chamado, o comando exit(VALOR) encerra imediatamente o programa e retorna VALOR para o sistema operacional. Exemplo:
/* verificando o funcionamento de "exit" */
#include <stdio.h>
int soma(int a, int b)
{
int resultado;
resultado = a + b;
/* "exit" encerra o programa imediatamente e retorna
* "resultado" para o sistema operacional */
exit(resultado);
}
int main()
{
int nr1,nr2,valor;
printf("Entre com o valor do primeiro número :");
scanf("%d",&nr1);
printf("Entre com o valor do segundo número :");
scanf("%d",&nr2);
/* Chamando a função soma. O comando "return"
* da função soma retornará "resultado" para
* aqui. */
printf("A soma dos dois é %d\n",soma(nr1,nr2));
/* Nada abaixo disto será executado pois o comando "exit"
* chamado na função "soma" acima encerrará imediatamente
* o programa e retornará "resultado" para o sistema operacional
*/
printf("Entre com o valor a ser retornado para
o sistema operacional :");
scanf("%d",&valor);
printf("Em ambiente Linux, digite o comando shell\n\n");
printf("$ echo $?\n\n");
printf("Para ver o valor retornado pelo programa\n");
/* "valor" será retornado para o sistema operacional
* pois este foi a função chamadora de "main" */
return(valor);
}
|
18.3 abort
Ao encontrar a função abort o programa é imediatamente encerrado e um valor de erro padrão do sistema é retornado para o sistema operacional. Exemplo:
/* verificando o funcionamento de "abort" */
#include <stdio.h>
#include <stdlib.h>
int soma(int a, int b)
{
int resultado;
resultado = a + b;
/* Ao encontrar "abort" o programa é imediatamente
* encerrado sendo retornado para o sistema
* operacional um dos valores de erro padrão
* do sistema */
abort();
exit(resultado);
}
int main()
{
int nr1,nr2,valor;
printf("Entre com o valor do primeiro número :");
scanf("%d",&nr1);
printf("Entre com o valor do segundo número :");
scanf("%d",&nr2);
/* Chamando a função soma. O comando "return"
* da função soma retornará "resultado" para
* aqui. */
printf("A soma dos dois é %d\n",soma(nr1,nr2));
/* Nada abaixo disto será executado pois o comando "exit"
* chamado na função "soma" acima encerrará imediatamente
* o programa e retornará "resultado" para o sistema operacional
*/
printf("Entre com o valor a ser retornado para
o sistema operacional :");
scanf("%d",&valor);
printf("Em ambiente Linux, digite o comando shell\n\n");
printf("$ echo $?\n\n");
printf("Para ver o valor retornado pelo programa\n");
/* "valor" será retornado para o sistema operacional
* pois este foi a função chamadora de "main" */
return(valor);
}
|
18.4 Definindo funções a serem executadas no encerramento do programa
Para definir funções a serem executadas no encerramento do programa use a função atexit() . Ela faz parte do arquivo de cabeçalho stdlib.h e sua sintaxe é:
ela faz com que FUNÇÃO seja chamada quando o programa terminar normalmente, ou seja, com uma chamada a exit() ou com uma chamada a return() a partir de main() . FUNÇÃO não recebe argumentos, assim, caso ela precise acessar dados estes devem ter sido declarados como variávesi globais. Você pode ainda definir mais de uma função a ser chamada com atexit . Neste caso elas serão chamadas na ordem inversa da declaração, ou seja, a última função declarada será a primeira a ser chamada. Caso tudo ocorra bem atexit retorna zero, caso contrário retorna -1. Observe abaixo um exemplo do uso de atexit :
/* utilizando "atexit" */
#include <stdio.h>
#include <stdlib.h>
void primeira()
{
printf("Primeira função chamada por atexit\n");
}
void segunda()
{
printf("Segunda função chamada por atexit\n");
}
void terceira()
{
printf("Terceira função chamada por atexit\n");
}
int main()
{
printf("Chamando atexit\n\n");
atexit(primeira);
atexit(segunda);
atexit(terceira);
return(0);
}
|