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

Uso de void.

Estas en el tema de Uso de void. en el foro de C/C++ en Foros del Web. Hola a todos. Quería un poco de información acerca de este código que acabo de aprender. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C: Ver original #include <iostream>   ...
  #1 (permalink)  
Antiguo 19/04/2013, 12:31
Avatar de Anzo  
Fecha de Ingreso: abril-2013
Ubicación: Madrid
Mensajes: 4
Antigüedad: 11 años, 8 meses
Puntos: 0
Pregunta Uso de void.

Hola a todos.

Quería un poco de información acerca de este código que acabo de aprender.

Código C:
Ver original
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. // tipo_de_dato nombre_de_funcion (tipos_de_datos_argumentos)
  6.  
  7.  
  8. void multiplicar (int, int); // Sirve para verificar si hay errores en los tipos de datos. Y siempre que llamemos a "multiplicar" se van a convertir los argumentos a tipos de datos enteros "int".
  9.  
  10. int main()
  11. {
  12.     multiplicar (5, 4); // El tipo de dato tiene que ser el mismo que en el prototipo "primer void" y el encabezado de la funcion "segundo void".
  13.  
  14.     system("pause");
  15.     return 0;
  16. }
  17.  
  18.  
  19. void multiplicar (int x, int y)
  20. {
  21.     cout << x * y << endl;
  22. }
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30. // "tipo_de_dato" es lo que devuelve la funcion.
  31.  
  32. // "nombre_de_funcion" es el nombre de la funcion que vamos a crear.
  33.  
  34. // "(tipos_de_datos_argumentos)" son los argumentos que le debemos pasar a la funcion para trabajar correctamente.
  35.  
  36. // "void" no devuelve ningun tipo de dato.


Según tengo entendido "void" no devuelve ningún tipo de dato.

Pero int main () tampoco devuelve ningún tipo de dato .

1- Entonces por que no puedo poner void main ()?

2- Que datos se suponen que debe devolver un int main (), en todos los ejemplos que he visto hasta ahora siempre el campo de los parámetros siempre esta vació.

3- De que me sirve crear un prototipo void (), si puedo establecer esas variables dentro del cuerpo de int main ().

4- Porque el primer void lleva punto y coma y el segundo void no la lleva?

5- int main () siempre tendrá los argumentos vacíos? Por que no le veo mucha lógica aun a esta linea de código.

6- void solo sirve para punteros según he leído. Aun no los he estudiado así que puede ser el problema de que no los entienda muy bien.



Espero que me puedan aclarar estas dudas.

Desde que ha entrado el void en mi vida todo se ha complicado demasiado jejeje.

PD: Si me lo explicáis, escribirlo de forma que un principiante lo entienda ^^.
  #2 (permalink)  
Antiguo 19/04/2013, 12:54
Avatar de jariza  
Fecha de Ingreso: agosto-2003
Ubicación: Málaga
Mensajes: 1.449
Antigüedad: 21 años, 4 meses
Puntos: 10
Respuesta: Uso de void.

Hola,

1) y 2) main sí devuelve un dato, el llamado "return code" o "exit status" (error level en DOS), échale un ojo a esto: http://en.wikipedia.org/wiki/Exit_status. Por lo tanto, main necesita devolver un int.

3) No llego a comprender esta pregunta. Un prototipo es una "definición previa" de una función. En el código que muestras se define el prototipo porque la implementación de "multiplicar" aparece después de que se use. Podrías ahorrarte el prototipo poniendo la implementación de "multiplicar" antes del main.

4) Por "primer void" y "segundo void" creo que te refieres a la declaración e implementación de "multiplicar". El primero lleva coma porque no es una implementación, no hay código definido para la función. El segundo no lleva coma porque tiene código dentro (el bloque definido por las llaves).

5) main define el punto de inicio del programa y sus argumentos no son inútiles. Una definición correcta de main es:
Código C:
Ver original
  1. int main( int argc, const char* argv[])
  • El valor devuelto (int) es para lo que te comenté arriba.
  • argc indica el número de parámetros que se le han pasado al programa por línea de comandos.
  • argv contiene cada uno de los parámetros que enumera argc. argv[0] contiene el nombre del propio ejecutable.

6) void sirve para punteros y para indicar que una función no tiene parámetros o que no devuelve valor. Ahora, como en C todo es un puntero...

Espero no estar haciéndote los deberes, porque el formato de la pregunta deja cierta duda XD

Un saludo :)
  #3 (permalink)  
Antiguo 19/04/2013, 12:55
 
Fecha de Ingreso: junio-2005
Mensajes: 93
Antigüedad: 19 años, 6 meses
Puntos: 9
Respuesta: Uso de void.

no tratare de responder todas la preguntas por separado. Daré una pequeña explicación del código.

int main() si devuelve algo si observas al final tiene un return.

Ya te debieron haber enseñado que existe una declaración(o prototipo) y una definición de una función lo que esta arriba solo es el encabezado(prototipo). Esta forma de crear funciones es util cuando tienes muchas funciones y no quieres tenerlas en un solo archivo asi que se crean dos archivos un archivo con extensión .h que tendrá todos los prototipos y un .c o c++ que tendrá las definiciones.

void tiene diferentes significados diferentes. Dependiendo de como se utilice. Punteros? no te compliques. Por el momento solo tienes que saber que utilizarlo en una función significa que la función no va a retornar nada.
  #4 (permalink)  
Antiguo 19/04/2013, 13:01
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 4 meses
Puntos: 83
Respuesta: Uso de void.

"...Pero int main () tampoco devuelve ningún tipo de dato..."

Seguro? El int main retorna un entero, 0 por defecto que indica que la aplicacion ha finalizado correctamente; esto es especialmente útil para aplicaciones que lanzan otro proceso y esperan una operacion o un resultado (si hubo algun error en esa tarea la aplicacion debe retornar un indice de error diferente de 0)

El int main es en verdad una redeclaracion de otra funcion de entrada, que lleva dos argumentos: un entero contador de argumentos y una lista de textos. Por defecto el s.o. asigna a este contador el numero de argumentos, y como argumentos una lista que siempre comienza por la ruta absoluta de la aplicacion lanzada. Esta redeclaracion acepta que llames a la funcion con argumentos y sin argumentos. En cualquier caso debe retornar un entero; el compilador por defecto te añadirá un return 0.

Los prototipos en C sirven para definir las funciones, y siempre tienen que estar prototipadas antes de usarse. Se suele prototipar antes del main en una cabecera para el main. El primer void lleva ; porque es la declaracion de un prototipo, es como si declararas una variable, y el segundo es la funcion en si, que por definicion del lenguaje está encerrado en corchetes y no finaliza con ;

Saludos
vosk
  #5 (permalink)  
Antiguo 19/04/2013, 13:02
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 4 meses
Puntos: 83
Respuesta: Uso de void.

Ups, perdonad jariza y dragg04, no vi vuestro post antes de colgar el mio. Supongo que basicamente será lo mismo.

Saludos
vosk
  #6 (permalink)  
Antiguo 19/04/2013, 13:07
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 4 meses
Puntos: 83
Respuesta: Uso de void.

Espera que aporto algo nuevo: el main

Código:
int main(int argc, char **argv) {
    return 0;
}
'argc' es el contador de elementos de 'argv', y 'argv' son los argumentos que suelen ser la ruta del ejecutable y la linea de comandos, p.ej.

Código:
miarchivo -r -a

arg = 3
argv[0] = 'ruta/miarchivo.exe'
argv[1] = '-r'
argv[2] = '-a'
Saludos
vosk
  #7 (permalink)  
Antiguo 19/04/2013, 14:42
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 13 años
Puntos: 46
Respuesta: Uso de void.

Cita:
Iniciado por jariza Ver Mensaje

5) main define el punto de inicio del programa y sus argumentos no son inútiles. Una definición correcta de main es:
Código C:
Ver original
  1. int main( int argc, const char* argv[])
  • El valor devuelto (int) es para lo que te comenté arriba.
  • argc indica el número de parámetros que se le han pasado al programa por línea de comandos.
  • argv contiene cada uno de los parámetros que enumera argc. argv[0] contiene el nombre del propio ejecutable.
Es const char* argv[]? Yo he escrito desde siempre char* argv[], hay alguna razon por la que sea const?
  #8 (permalink)  
Antiguo 19/04/2013, 14:46
Avatar de jariza  
Fecha de Ingreso: agosto-2003
Ubicación: Málaga
Mensajes: 1.449
Antigüedad: 21 años, 4 meses
Puntos: 10
Respuesta: Uso de void.

Woops, creo que se me ha escapado ese const ahí, mil perdones :)

La linea de main es una línea que soy incapaz de memorizar, así que siempre la copio de algún sitio (generalmente dejo que el editor de código la inserte).
  #9 (permalink)  
Antiguo 23/04/2013, 11:36
Avatar de Anzo  
Fecha de Ingreso: abril-2013
Ubicación: Madrid
Mensajes: 4
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Uso de void.

Gracias por ayudarme a resolver esta duda.

Ahora lo veo mas claro.

Da gusto encontrar gente que ayude tanto ^^

Por cierto jariza, no estudio en ninguna escuela.

Estoy desde mi casa aprendiendo por mi cuenta.

Por eso se me presentan estas dificultades que a lo mejor para estudiantes de universidad son obvias jejeje.

Saludos y gracias.

Etiquetas: funcion, int, variable
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 18:10.