Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Proxmond en 3 Junio 2014, 05:04 am



Título: [Ayuda] ¿Por que no puedo llamar funciones en C?
Publicado por: Proxmond en 3 Junio 2014, 05:04 am
Tengo este pequeño código, que funcionalmente debería imprimir un hola mundo en consola, pero no, no me deja:

Código:
#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.


Título: Re: [Ayuda] ¿Por que no puedo llamar funciones en C?
Publicado por: 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í
Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. void msgHola();
  5. void msgMundo();
  6.  
  7. int main(){
  8.    msgHola();
  9.  
  10.    system("PAUSE");
  11.    return 0;
  12. }
  13.  
  14. void msgHola(){
  15.     printf("Hola ");
  16.     msgMundo();    
  17. }
  18.  
  19. void msgMundo(){
  20.     printf("Mundo\n\n");    
  21. }



Título: Re: [Ayuda] ¿Por que no puedo llamar funciones en C?
Publicado por: Proxmond en 3 Junio 2014, 05:20 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í
Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. void msgHola();
  5. void msgMundo();
  6.  
  7. int main(){
  8.    msgHola();
  9.  
  10.    system("PAUSE");
  11.    return 0;
  12. }
  13.  
  14. void msgHola(){
  15.     printf("Hola ");
  16.     msgMundo();    
  17. }
  18.  
  19. void msgMundo(){
  20.     printf("Mundo\n\n");    
  21. }



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.


Título: Re: [Ayuda] ¿Por que no puedo llamar funciones en C?
Publicado por: 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) (http://nereida.deioc.ull.es/~pcgull/ihiu01/cdrom/c/contenido/node10.html)

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

Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int suma(int a, int b);
  5. int cuadrado(int c);
  6. void imprimirNumero(int d);
  7.  
  8. int main(){
  9.    int valor1 = suma(5,8);
  10.    int valor2 = cuadrado(5);
  11.    imprimirNumero(valor1);
  12.    imprimirNumero(valor2);
  13.    system("PAUSE");
  14.    return 0;
  15. }
  16.  
  17. int suma(int a, int b){
  18.     return (a+b);  
  19. }
  20.  
  21. int cuadrado(int c){
  22.     return (c*c);  
  23. }
  24.  
  25. void imprimirNumero(int d){
  26.     printf("%d\n",d);  
  27. }
  28.  


Título: Re: [Ayuda] ¿Por que no puedo llamar funciones en C?
Publicado por: Proxmond en 3 Junio 2014, 05:40 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) (http://nereida.deioc.ull.es/~pcgull/ihiu01/cdrom/c/contenido/node10.html)

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

Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int suma(int a, int b);
  5. int cuadrado(int c);
  6. void imprimirNumero(int d);
  7.  
  8. int main(){
  9.    int valor1 = suma(5,8);
  10.    int valor2 = cuadrado(5);
  11.    imprimirNumero(valor1);
  12.    imprimirNumero(valor2);
  13.    system("PAUSE");
  14.    return 0;
  15. }
  16.  
  17. int suma(int a, int b){
  18.     return (a+b);  
  19. }
  20.  
  21. int cuadrado(int c){
  22.     return (c*c);  
  23. }
  24.  
  25. void imprimirNumero(int d){
  26.     printf("%d\n",d);  
  27. }
  28.  

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