Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] funciones en c++ modo de declarar

Estas en el tema de funciones en c++ modo de declarar en el foro de C/C++ en Foros del Web. Hola a todos! Ok el post es para aclarar algunas dudas ya que soy nuevo en esto de programar en c++, espero que me puedan ...
  #1 (permalink)  
Antiguo 11/02/2013, 17:39
Avatar de nightwalkervampire  
Fecha de Ingreso: febrero-2013
Mensajes: 2
Antigüedad: 11 años, 9 meses
Puntos: 0
Pregunta funciones en c++ modo de declarar

Hola a todos!

Ok el post es para aclarar algunas dudas ya que soy nuevo en esto de programar en c++, espero que me puedan ayudar, gracias de antemano.

Para empezar he estado leyendo dos libros que aseguran ser para principiantes uno es el C++ iniciación y referencia edit: mc graw hill, y otro es el C++ how to program eighth edition edit: Deitel, cada uno propone una manera diferente de programar pero en el cual dan errores o no se si es que uno tiene que tener la noción de lo que hace y no son básicos como se hacen llamar.

ok lo que he leido en cada uno es que uno puede declarar las funciones en c++ sin tener que darles a las mismas un dato de retorno ejem:

primer caso:
Código:
MiFuncion() { codigo... }// no funciono

int MiFuncion() { codigo...}// funciono
eso lo intente pero solo me dio errores de compilación, declarando la función asi fuera void pude hacer que funcionara, pero entonces por que muestran que las funciones pueden ser declaradas sin especificar el dato de retorno, es posible hacerlo? y tambien muestran que pueden ser declaradas después de el main() para ser llamadas durante la ejecución

lo otra duda que me ronda en la cabeza es que me puse a hacer un pequeño menú para ver como era la cosa en la linea de comando utilizando un switch, pues funciono bien pero se me ocurrió separar lo que hacia en funciones llamar a las mismas desde el menú también trabajo bien dado que las funciones fueron declaradas antes de el main() y finalizaba el programa , los errores empezaron en el momento que cada función empezó a tener su submenu para llamar a la función que hacia de menú principal, decía que no había sido declarada la función por lo cual no podía ser llamada ejem:

segundo caso:
Código:
int mimenu(){ switch(x){ case 1: option();...} }//menu

int option(){ codigo...}//opción  

int main() { mimenu(); }//llamada de menu
en ese caso me arrojo un error que option() no había sido declarada

tercer caso
Código:
int main() { mimenu(); }//llamada de menu 

int mimenu(){ switch(x){ case 1: option();...} }//menu

int option(){ codigo...}//opción
aquí arrojo el mismo error pero con el mimenu() bueno tal como aparecía en el libro la función después de el main()

buscando por internet por que me pareció que los dos libros estaban des actualizados encontré algo que ya había leído, prototipos de las funciones con eso solucione los dos errores que tenia encontrado en los libros hice esto

Código:
#include <iostream>

using namespace std;

int mimenu();
int fileopen();

int main()
{
        mimenu();
}//end main()

int mimenu()
{
    int x; //Variable for menu option
    //system("cls");
    cout << "1. Open\n2. Save\n3. Exit\n\n";
    cin >> x;
    switch( x )
    {
        case 1:
            fileopen();
            break;
        case 2:
            //savefile();
            break;
        case 3:
            //exitfile();
            break;
        default:
            cout << "No such an option.\n";
            break;
    }//end switch
    return 0;
}//end mimenu()

int fileopen()
{
    cout << "The file have be open\n\n";
    int x;
    cout << "1.Back | 2.Exit: ";
    cin >> x;
    switch( x )
    {
        case 1:
            mimenu();
            break;
        case 2:
            break;
        default:
            break;
    }//end switch
    return 0;
}//end  fileopen()
funciona de maravilla ahora las dudas que tengo son, por que muestran que se pueden declarar funciones sin datos de retorno?, por que si ya declare las funciones prototipos con su retorno de dato en este caso int, por que debo declarar el dato de retorno int nuevamente?, por que si se esta declarando las funciones antes de el main() igual arroja error al momento de compilar como en el segundo caso?

les agradecería toda la ayuda que puedan brindar y recomendaciones
  #2 (permalink)  
Antiguo 12/02/2013, 01:58
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 10 meses
Puntos: 606
Respuesta: funciones en c++ modo de declarar

Para declarar que una función no tiene dato de retorno has de poner que "devuelve" void:

Código C++:
Ver original
  1. void MiFuncion() { codigo... }// no devuelve nada
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 12/02/2013, 08:26
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 12 años, 4 meses
Puntos: 28
Respuesta: funciones en c++ modo de declarar

Cita:
Iniciado por nightwalkervampire Ver Mensaje
funciona de maravilla ahora las dudas que tengo son, por que muestran que se pueden declarar funciones sin datos de retorno?, por que si ya declare las funciones prototipos con su retorno de dato en este caso int, por que debo declarar el dato de retorno int nuevamente?, por que si se esta declarando las funciones antes de el main() igual arroja error al momento de compilar como en el segundo caso?

les agradecería toda la ayuda que puedan brindar y recomendaciones
Antes todo, tengo que decirte que C++ tiene una sintaxis muy rígida y estricta. Aunque todo tiene sus explicaciones.

Las funciones sin retorno deben ir precedidas por void:

Código C++:
Ver original
  1. void MiFuncion();

De lo contrario, el compilador interpetraría que intentas llamar a la función:
Código C++:
Ver original
  1. MiFuncion(); // Error, esta funcion no existe

Podrías pensar que las llaves al declarar son un factor indicativo, pero tampoco lo es. Ten en cuenta que se pueden poner llaves sueltas para indicar bloques de código independientes:

Código C++:
Ver original
  1. MiFuncion() // El compilador llamara a MiFuncion
  2. { // Se ha abierto un bloque de codigo independiente
  3.  
  4. }

En cuanto a la siguienta pregunta: ¿Por que tengo que poner el retorno tanto en la declaración como en la implementación? Pues por la misma razón anterior, el compilador tiene que saber de alguna manera que lo estas poniendo es una declaración de función y no una llamada con un bloque de código posterior.

Código C++:
Ver original
  1. por que si se esta declarando las funciones antes de el main() igual arroja error al momento de compilar como en el segundo caso?
Pues porque Option() no había sido declarada en el momento que se llamó.

Es una regla un poco estricta, pero la filosofía de C++ es que todo dato que se use debe declararse previamente. Gracias a esta regla los compiladores pueden trabajar mucho más rápido (de lo contrario tendrían que hacer varias pasadas al código para ir rellenando las llamadas a funciones sin declarar).

Última edición por amchacon; 12/02/2013 a las 08:49
  #4 (permalink)  
Antiguo 12/02/2013, 21:59
Avatar de nightwalkervampire  
Fecha de Ingreso: febrero-2013
Mensajes: 2
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: funciones en c++ modo de declarar

Gracias por las respuestas de verdad que han sido de mucha ayuda :)

Etiquetas: declarar, funcion, funciones, int, modo, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:53.