C/Visual C - ¿void?

 
Vista:

¿void?

Publicado por Dimus (22 intervenciones) el 08/09/2002 21:09:51
Buenas.
Tengo un pequeño problema, no se para que sirve void. He leido que sirve para que la funcion no tenga ningun parametro, por lo tanto:

funcion() {....} es igual a void funcion(void) {....}

Ya que funcion() {...} no tiene ningun parametro.
Otra duda, tambien me gustaria saber para que es void main() y void main(void).

Muchas gracias a todos :-)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:¿void?

Publicado por Ismael (230 intervenciones) el 08/09/2002 21:54:06
void funcion(void) {....} ...
Lo que precede al identificador de una función es el tipo de dato que dicha función va a devolver. En este caso, si es void, la función no devuelve nada a quien la invocó.
char * func(char cadena) // es una fucnión que recibe un caracter como parámetro y devuelve un puntero a caracter.
Si no aparece ningun tipo de dato a devolver, el dato devuelto, por defecto va a ser int:
int main() es identico a
main()
¿A quien devuelve main() algun dato?: Al sistema operativo.
El funcionamiento es el mismo:
float main() devuelve un valor ffloat....
Es decir, si se pone void es para no tener que devolver nada.
Para devolver algo, se debe emplear la sentencia return
En todo caso, aunque no devuelva datos, una función siempre devuelve el control a quien la invocó (en el caso de la función main, al sistema operativo.
Saludos

Ismael
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿void?

Publicado por Dimus (22 intervenciones) el 08/09/2002 22:50:50
¿pero que tiene que devolver?

Porque si hago estos dos ejemplos me va a devolver lo mismo.

CASO 1
----------

main(){
printf("hola");
funcion();
}

funcion(){
printf("adios");
}

CASO 2
----------

main(){
printf("hola");
funcion();
}

void funcion(void){
printf("adios");
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿void?

Publicado por chuidiang (677 intervenciones) el 09/09/2002 06:06:16
No se en visual c++, pero en unix, si pones

funcion();

presupone que devuelve un entero y al compilar

funcion()
{
printf("adios");
}

da error de que la función debe devolver un entero y no compila. Por ello, si queremos que la función no devuelva nada, es obligatorio poner el void delante.

En cuanto al parámetro, efectivamente da igual poner void que no poner nada.

Otro uso intersante de void es su puntero. void * es un puntero a cualquier tipo y no da ningún tipo de warning la asignación con cualquier otro tipo de puntero.
Si tienes una función que deba admitir cualquier puntero, se suele poner void * como parámetro.
Para el mismo uso también se puede usar char *, pero ese si puede dar algún warning al compilar diciento que ha tenido que hacer un "cast".

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿void?

Publicado por El Mogur (202 intervenciones) el 09/09/2002 14:02:21
Ásí es, si no pones el tipo que devuelve la función se sobreentiende que es tipo 'int', independientemente del sistema operativo y compilador; es la especificación de C.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿void?

Publicado por Googol (255 intervenciones) el 09/09/2002 18:52:51
Lo que quizá varia es que el compilador dé un error o solo un aviso (warning) cuando no has puesto el return.

Dimus, el problema además es que puedes llamar a una función que devuelve algo, pero no atender a ese valor devuelto:

int suma(int a, int b) { return a + b; }

void main() {
suma(5,10); // Ignoramos el resultado.
}

De hecho printf es una función que devuelve el número de caracteres escritos. Pero como ese dato no es muy interesante, casi nadie lo usa y se llama simplemente a printf(...) a secas, despreciando el resultado.

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar