• Viernes 26 de Abril de 2024, 05:08

Autor Tema:  El Famoso Return 0;  (Leído 28136 veces)

pingukapo

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
El Famoso Return 0;
« en: Viernes 26 de Enero de 2007, 18:52 »
0
ok, a ver, aqui estoy de nuevo yo, y habia leido la teoria del famoso return 0; y es que la verdad no entendi muy bien para que me sirve agregarlo en un programa, es decir, habia leido algo de que era para verificar que el programa no tuviera errores o algo asi, pero alguien me lo puede explicar bien??graciasss :P

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: El Famoso Return 0;
« Respuesta #1 en: Viernes 26 de Enero de 2007, 23:43 »
0
Creo que es parte del standar ANSI C.

grandzam

  • Miembro MUY activo
  • ***
  • Mensajes: 118
    • Ver Perfil
Re: El Famoso Return 0;
« Respuesta #2 en: Sábado 27 de Enero de 2007, 00:15 »
0
Segun lo que he leido es porque main tambien es una funcion, si te fijas, tiene todo para ser una funcion, por ejemplo:

Código: Text
  1. //int tipo de dato a regresar, tipo de retorno
  2. int main(){//main() es el nombre de la funcion, el compilador siempre
  3.                 //busca la funcion principal llamada main para comenzar
  4.                 //a veces he cambiado el tipo de retorno por void y ha funcionado
  5.                 //pero no he visto si se puede cambiar a algun otro en lugar de
  6.                //int o void
  7.   return 1; //aqui retornas el tipo de dato que te dice alla arriba en el encabezado
  8.                //en este caso un entero(1); una vez retornado el tipo de dato, el programa
  9. }             //termina y regresa el control a la consola
  10.  

ArKaNtOs

  • Miembro de PLATA
  • *****
  • Mensajes: 1253
  • Nacionalidad: mx
    • Ver Perfil
Re: El Famoso Return 0;
« Respuesta #3 en: Sábado 27 de Enero de 2007, 01:08 »
0
Return sirve para retornar un valor, en este caso cuando tu inicias la función main
y lo haces con el tipo de datos void no necesitas retornar ningún valor en cambio si lo haces con otro tipo de datos requieres retornar un valor del tipo de datos con el que declaraste la función principal, por ejemplo:

int main(){.....
....
return 0; // regresas un valor de 0 para indicar que todo ha salido bien
}

otra cosa ese return puede ir en cualquier lado de la función indicando que termine de ejecutar la función

pingukapo

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: El Famoso Return 0;
« Respuesta #4 en: Sábado 27 de Enero de 2007, 03:57 »
0
pero ahora para que pongo el return 0; es decir si para indicar que todo ha salido bien noi hace falta, eso lo tendra que determinar el compilador, o no?

Masiosare

  • Miembro MUY activo
  • ***
  • Mensajes: 118
    • Ver Perfil
Re: El Famoso Return 0;
« Respuesta #5 en: Sábado 27 de Enero de 2007, 05:05 »
0
En la programación estructurada existen lo que se llaman "subprogramas" y "funciones definidas por el usuario".

Un subprograma (en C/C++ se les llaman funciónes vacías) es un conjunto de instrucciónes agrupadas en orden bajo un mismo nombre el cual será utilizado para accesar a el desde diferentes puntos del programa. Cuando en un programa se requiera hacer una pequeña tarea repetidamente pones su codigo en un subprograma y lo llamas cuando requieras ejecutar esa tarea. Esto te ayuda a hacer el código mucho más pequeño y legible. Algunos subprogramas requieren que les des datos con los cuales trabajar, a los cuales se les llaman argumentos.

Por ejemplo:

(este algorítmo no funciona bien, solo explica como es una función vacía)

Código: Text
  1.  
  2. subprograma saludo (nombre, hora)
  3.  cadena <- "buenas noches"
  4.  si hora < 12 entonces cadena <- "Buenos días"
  5.   sino
  6.    si hora < 19 entonces cadena <- "buenas tardes"
  7.  escribir cadena + nombre
  8. fin subprograma
  9.  
  10.  

en C se escribiría:

Código: Text
  1.  
  2. void saludo(nombre, hora)
  3.  {
  4.    char cadena[13]="Buenas noches";
  5.  
  6.    if (hora < 12) cadena = "Buenos días  "
  7.    else
  8.     if (hora < 19) cadena = "Buenas tardes";
  9.    cout << cadena << " " << nombre;
  10.  }
  11.  
  12.  

La "función definida por el usuario" es igual al subprograma con la diferencia de que su ejecución debe resultar en la obtención de un dato desconocido, en términos de la programación se dice que "devuelven un valor". Es usan casi igual a los subprogramas, solo que éstos últimos están destinados al procesamiento de datos. Las funciones pueden tener argumentos y deben tener especificado el tipo de dato que regresarán.

Por ejemplo:

Código: Text
  1.  
  2. función entera promediotres(num1, num2, num3)
  3.  x<-num1+num2
  4.  x<-x+num3
  5.  x<-x/3
  6.  devolver x
  7. fin función
  8.  
  9.  

en C sería:

Código: Text
  1.  
  2. int promediotres(num1, num2, num3)
  3.  {
  4.   int x=num1+num2;
  5.  
  6.   x+=num3; //Esto es igual a escribir 'x=x+num3'
  7.   x/=3; //Esto es igual a escribir 'x=x/3'
  8.   return x //He aquí la instrucción por la que preguntas
  9.  }
  10.  
  11.  

Para llamar a las funciones (sean vacías o no) se escribe en la linea de código el nombre de la función y sus argumentos entre paréntesis.

Por ejemplo:

Código: Text
  1.  
  2.  ...
  3.  saludo("pingukapo", 20);
  4.  ...
  5.  
  6.  

Código: Text
  1.  
  2. int m=0,j=0,k=0,l=0;
  3. ...
  4. cout << "Escriba 3 números: ";
  5. cin >> j;
  6. cin >> k;
  7. cin >> l;
  8. m=promediotres(j,k,l);
  9. cout << "El promedio de los 3 número es: " << m;
  10. ...
  11.  
  12.  

Las funciones (a excepción de las vacías) deben manejarse como variables. La instrucción "m=promediotres(j,k,l);" llamó a la función "promediotres" con los valores de "j","k", y "l" como argumentos. La instrucción "return x" dentro de la función "promediotres" provocó que la función devolviera el valor de la variable "x". El dato devuelto por "promediotres" (el valor de "x") es asignado a "m" por la primer instrucción citada.

En el caso de C/C++ el programa principal debe estar en una función llamada "main", de seguro te enseñaron que al principio del programa deben de estar las llamadas a librerías ('<xxxxx.h>'), luego esto: "int main()", y después el programa encerrado entre llaves ({ }). Pues "int main()" declara la función "main()" (el programa principal) y dice que debe devolver un dato del tipo entero, y el "return 0" devuelve el valor 0 (un dato del tipo entero). Si dentro de una función no das la instrucción de devolver un dato, el compilador marca error. En pocas palabras, El "int main()" obliga al "return 0".

Al menos en el caso de quienes estén aprendiendo, no tiene utilidad. No sé si la función "main" tenga a qué devolverle un valor (quizá sea al S.O. u otro programa que lo mande ejecutar).

Es más, si en lugar de "int main()" pones "void main()", no necesitarás el "return 0", de hecho, marcará error si lo agregas (pero cuidado antes de hacerlo en clases, podrías hacer quedar mal al maestro, jeje).



P.D.: Por algunos problemillas no he programado desde que salí de la universidad (hace poco más de un año), ya sé que tengo errores en los códigos que puse, solo quería ejemplificar el uso de funciones :hitcomp:
El experto es aquel que sabe cada vez más sobre cada vez menos, hasta que sabe competamente todo sobre absolutamente nada.
[size=109]Ley de Murphy[/size]

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: El Famoso Return 0;
« Respuesta #6 en: Sábado 27 de Enero de 2007, 15:38 »
0
Hola,
La razón es bien simple, cuando tu llamas a un programa desde otro, una de las formas más simples para saber si ha finalizado correctamente es ver qué devuelve cuando termina.
Cuando agregas un return(0) el SO se encarga de devolver ese valor al proceso que llama a este programa al finalizar, en caso de fallo (supón que el programa finaliza de manera abrupta por un puntero que se va de rango, con ese maldito mensaje de Unhandled exception...), en ese momento el SO devolvería un -1.
De esta forma podemos llamar a un programa, si al finalizar nos devuelve un 0 es que se ha ejecutado de manera correcta, si devuelve un -1 es que ha ocurrido algún error.

Es por este motivo que todos los programas en C debieran ser de la siguiente forma:
int main (int argc, char *argv[])

De esta manera recibiríamos los parámetros de entrada en el arranque desde la interfaz de comandos de DOS (como cuando llamamos a la función ipconfig, si queremos podemos agregar un valor de entrada del tipo ipconfig /all) y de esta manera el programa devolverá un valor según se den una serie de condiciones....  En algunos casos puede interesar devolver varios valores dependiendo de la ejecución y así pasar argumentos al programa padre que llama a este programa.

Un saludo.  :lightsabre:
No hay tonto más molesto que el ingenioso.

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: El Famoso Return 0;
« Respuesta #7 en: Sábado 27 de Enero de 2007, 23:16 »
0
Cita de: "carmamezo"
Hola,
La razón es bien simple, cuando tu llamas a un programa desde otro, una de las formas más simples para saber si ha finalizado correctamente es ver qué devuelve cuando termina.
Esa es la razón. El estándar ANSI/ISO especifica que la función main debe devolver un valor de tipo int. Y, de forma general, se emplea un valor de 0 como resultado para indicar que el programa finalizó sin problemas. Normalmente, si tuvieras algún problema devolverías un valor distinto de 0:

Código: Text
  1.  
  2. // El estándar nos indica que main devuelve un int
  3. int main() {
  4.   ArchivoAudio* musicaDeFondo = CargaArchivoAudio( &#34;fondo.mp3&#34; );
  5.  
  6.   if ( musicaDeFondo == NULL ) {
  7.     // Devolvemos un 1 y terminamos el programa.
  8.     return 1;
  9.     // O también:
  10.     // exit( 1 );
  11.   }
  12.  
  13.   return 0;
  14.   // O también:
  15.   // exit( 0 );
  16. }
  17.  
  18.  
En el caso de la función exit, ya existen definidos dos valores posibles para pasarle como argumentos: EXIT_SUCCESS y EXIT_FAILURE, el primero es igual a 0 y el segundo a 1 en varios compiladores, aunque puede variar entre ellos.

Saludos,
JJ (Geo).
La imaginación es el límite.
Hardware & Software | Mexchip

pingukapo

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: El Famoso Return 0;
« Respuesta #8 en: Domingo 28 de Enero de 2007, 17:23 »
0
hola, gracias, gracias, ya se me aclaro la duda, muchas gracias!