[Ayuda] ¿Por que no puedo llamar funciones en C?

Iniciado por Proxmond, 3 Junio 2014, 05:04 AM

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

Proxmond

Tengo este pequeño código, que funcionalmente debería imprimir un hola mundo en consola, pero no, no me deja:

#include <stdlib.h>
#include <stdio.h>

void msgHola(){
    printf("Hola ");
    msgMundo();    
}

void msgMundo(){
    printf("Mundo");    
}

int main(){
   msgHola();
   
   system("PAUSE");
   return 0;
}


Entonces cuando llamo la función msgMundo(); desde la funcion msgHola(); me da este error:

conflicting types for 'msgMundo'
previous implicit declaration of 'msgMundo' was here
Build Error]  [main.o] Error 1

No se que error habrá, estuve mirando un par de vídeos acerca de funciones, y ellos lo hacen así, ¿Pero a mi no me funciona?

Saludos y espero puedan ayudarme.

engel lex

basicamente porque llamas a msgMundo antes de declararla y el compilador la ve como un error


puedes arreglarla colocando primero msgMundo o haciendolo con prototipos (porque es más legible y "elegante"

así
#include <stdlib.h>
#include <stdio.h>

void msgHola();
void msgMundo();

int main(){
    msgHola();
   
    system("PAUSE");
    return 0;
}

void msgHola(){
     printf("Hola ");
     msgMundo();   
}

void msgMundo(){
     printf("Mundo\n\n");     
}


El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Proxmond

Cita de: engel lex en  3 Junio 2014, 05:15 AM
basicamente porque llamas a msgMundo antes de declararla y el compilador la ve como un error


puedes arreglarla colocando primero msgMundo o haciendolo con prototipos (porque es más legible y "elegante"

así
#include <stdlib.h>
#include <stdio.h>

void msgHola();
void msgMundo();

int main(){
    msgHola();
   
    system("PAUSE");
    return 0;
}

void msgHola(){
     printf("Hola ");
     msgMundo();   
}

void msgMundo(){
     printf("Mundo\n\n");     
}




Muchas gracias, me funciono de maravilla, pero me quedo una duda cuando tu dijiste "prototipos" ¿A que te referías y que lo que es?
Saludos.

engel lex

#3
los prototipos son "pre declaraciones" de las funciones, fijate como se declaran al inicio del codigo, eso le dice al compilador que funciones habrán en el codigo, no saturas tanto antes del main y el codigo está listo para declaraciones sin importar el orden, el prototipo se declara exactamente igual que la funcion pero sin el contenido...

(más info)

aqui un ejemplo más largo de como usarlos...


#include <stdlib.h>
#include <stdio.h>

int suma(int a, int b);
int cuadrado(int c);
void imprimirNumero(int d);

int main(){
   int valor1 = suma(5,8);
   int valor2 = cuadrado(5);
   imprimirNumero(valor1);
   imprimirNumero(valor2);
   system("PAUSE");
   return 0;
}

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

int cuadrado(int c){
    return (c*c);  
}

void imprimirNumero(int d){
    printf("%d\n",d);  
}

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Proxmond

Cita de: engel lex en  3 Junio 2014, 05:30 AM
los prototipos son "pre declaraciones" de las funciones, fijate como se declaran al inicio del codigo, eso le dice al compilador que funciones habrán en el codigo, no saturas tanto antes del main y el codigo está listo para declaraciones sin importar el orden, el prototipo se declara exactamente igual que la funcion pero sin el contenido...

(más info)

aqui un ejemplo más largo de como usarlos...


#include <stdlib.h>
#include <stdio.h>

int suma(int a, int b);
int cuadrado(int c);
void imprimirNumero(int d);

int main(){
   int valor1 = suma(5,8);
   int valor2 = cuadrado(5);
   imprimirNumero(valor1);
   imprimirNumero(valor2);
   system("PAUSE");
   return 0;
}

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

int cuadrado(int c){
    return (c*c);  
}

void imprimirNumero(int d){
    printf("%d\n",d);  
}


Buenísimo muchas gracias, tema resuelto.
Cualquier sugerencia, bienvenida sea.
Saludos.