[C]funciones

Iniciado por k0b3, 25 Mayo 2013, 05:27 AM

0 Miembros y 1 Visitante están viendo este tema.

k0b3


#include <stdio.h>
void mensaje(int a);  //aun cambiando int a por void
int main(void){
int x0;
printf("Ingrese un número: ");
scanf("%d",&x0);
if (x0==1){
mensaje(x0); //¿Por que necesita x0?
}else{
printf("Error.");
}
}

void mensaje(int x0){
printf("hola mundo");
}


El programa en sí mismo está bien... pero no entiendo porque necesita la funcion recibir una variable entera [mensaje(x0);] llamada x0... es decir, ¿no bastaria solo con llamar a la funcion?

lo pregunto porque le puse void en lo que va a recibir pero aún así lo necesita.. he buscado en muchos libros y videos y ninguno muestra una respuesta clara...

KaL3o

#1
eso es porque al declarar tu funcion estas mandandole parametros

en este caso usas
Código (cpp) [Seleccionar]
void mensaje (int a)

la primera palabra es el tipo de lo que se va a retornar, la segunda el nombre de la funcion y dentro de los parentesis los parametros de la funcion.

Al inicio de tu codigo estas declarando que esta funcion lleva un parametro en este caso int a, incluso puedes quitarle la a y dejar solo int, asi la funcion sabe que va a recibir un entero. Si no le colocas ningun parametro entonces la funcion sabra que no va a recibir ninguno, de igual forma si le pones 2 o mas.

al momento de declarar la funcion puedes eliminarle el parametro.

Espero esto te sirva para aclarar dudas :)
#include <stdio.h>
void mensaje();  //ahora estamos declarando que la función no recibe parametros
int main(void){
    int x0;
    printf("Ingrese un número: ");
    scanf("%d",&x0);
    if (x0==1){
        mensaje(); //ya no necesita el x0
    }else{
        printf("Error.");
    }
}

void mensaje(){ //aqui tampoco necesita el x0 o el int como lo quiseras llamar aquí
    printf("hola mundo");
}

salu2 :)
Todos los caminos se vuelven a juntar. Pero nunca de la misma forma.

k0b3

bien gracias no me habia resultado porque le puse void a todas XD

rir3760

Un comentario:

En C++ cuando se declara una función en la forma:
Código (cpp) [Seleccionar]
int fn();
Ello indica que el tipo de retorno de la función es int y no recibe argumentos.

Pero en C la misma declaración:
int fn();
Indica una función que recibe un numero no determinado de argumentos, para indicar que no recibe argumentos se debe indicar explícitamente utilizando la palabra reservada void:
int fn(void);

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

k0b3

es eso lo extraño, le puse void a todas y en la linea de mensaje no me permitio ponerle void..

leosansan

Cita de: k0b3 en 25 Mayo 2013, 18:12 PM
es eso lo extraño, le puse void a todas y en la linea de mensaje no me permitio ponerle void..

No termino de entender lo que quieres decir, pero con la observación de rir3760 el programa furula bien, es decir así:


Código (cpp) [Seleccionar]
#include <stdio.h>

void mensaje(void);

int main(void){
    int x0;
    printf("Ingrese un numero: ");
    scanf("%d",&x0);
    if (x0==1)
        mensaje();
    else
        printf("Error.");
    return 0;
}
void mensaje(void){
    printf("hola mundo");
}


Saluditos! .... ..