Cerrar programa con funcion exit

Iniciado por arcadio2r, 19 Diciembre 2012, 17:39 PM

0 Miembros y 2 Visitantes están viendo este tema.

arcadio2r

Buenas,

tengo una duda con la función "exit" y la liberación de recursos.

¿Hace falta la llamada "exit" para finalizar el programa correctamente y liberar los recursos del proceso, o no hace falta esta instrucción para finalizar liberando los recursos porque el compilador ya la introduce?

Muchas gracias.

rir3760

En el lenguaje C para terminar una aplicación desde la función main basta con una sentencia "return N;" ya que en esa función es equivalente a "exit(N);".

Desde cualquier otra función debes utilizar "exit(N);".

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

arcadio2r

Cita de: rir3760 en 19 Diciembre 2012, 17:48 PM
En el lenguaje C para terminar una aplicación desde la función main basta con una sentencia "return N;" ya que en esa función es equivalente a "exit(N);".

Desde cualquier otra función debes utilizar "exit(N);".

Un saludo

Primero de todo, gracias por la respuesta.

La pregunta que hago hace referencia a un "void main". En este caso, el codigo finaliza correctamente con y sin el "exit(x)". ¿Pero sin el exit el compilador liberará los recursos del proceso?

naderST

El problema de utilizar void main es que el sistema operativo está esperando un valor de retorno de tu programa y no estas retornando nada. Utilizar void main, a pesar de que funciona, no  es lo correcto. En este caso de void main deberías utilizar siempre exit(N) para salir.

rir3760

Cita de: arcadio2r en 20 Diciembre 2012, 11:08 AMLa pregunta que hago hace referencia a un "void main". En este caso, el codigo finaliza correctamente con y sin el "exit(x)". ¿Pero sin el exit el compilador liberará los recursos del proceso?
No se recomienda el uso de "void main()" porque su soporte depende del compilador utilizado y, si se soporta, utilizar "return N;" (en main) o "exit(N);" es un error ya que la definición utilizada no permite retornar un valor. Mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|

En cuanto a recursos depende a que te refieras. El estándar de C solo indica que en una terminación normal del programa los bufers se vacían, los archivos se cierran y algunos otros detallitos mas (por ejemplo los archivos creados mediante la función tmpfile se eliminan).

Para cualquier otro recurso no hay otra opción que revisar la documentación del compilador.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

ithory

#5
Al final de cada proceso para liberar los recursos hay que usar la llamada al sistema exit();, exit(0) por ejemplo.

Pero solo al final de cada proceso, por ejemplo si creas un proceso con fork();

int valor;
valor=fork();

if(valor == 0) //estamos en el proceso hijo, cuando acabemos de poner el código del hijo haremos un
.....
.....
.....
exit(0)

arcadio2r

Muchas gracias.  ;-)

Ya me ha quedado claro!

Feliz Navidad y Año Nuevo!