elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  No entiendo por qué se puede usar esta función ¡si no debiera!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No entiendo por qué se puede usar esta función ¡si no debiera!  (Leído 1,519 veces)
tecno46

Desconectado Desconectado

Mensajes: 2


Ver Perfil
No entiendo por qué se puede usar esta función ¡si no debiera!
« en: 2 Noviembre 2014, 13:49 pm »

Hola amigos.
Estoy aprendiendo C y estaba repasando en mi libro de texto el uso de los archivos header o cabecera. Yo me hice un ejercicio compuesto de 4 archivos, que son los siguientes..

  • main.c
  • funciones.c
  • funciones.h
  • global.h

main.c
Código:
#include "global.h"
#include "funciones.h"

int main(int argc, char** argv) {
    int i;
    char a, b, c;
    for (i = 1; i < 3; ++i) {
        printf("Introduzca primer caracter: ");
        scanf("%c", &a);
        printf("Introduzca segundo caracter: ");
        flush_in();
        scanf("%c", &b);
        printf("Introduzca tercer caracter: ");
        flush_in();
        scanf("%c", &c);
        printf("Los valores son: %c, %c, %c \n", a, b, c);
        flush_in();
    }
    return (EXIT_SUCCESS);
}


funciones.c
Código:
#include "funciones.h"

/* Limpia buffer de entrada */
void flush_in(void) {
    int ch;
    while ((ch = fgetc(stdin)) != EOF && ch != '\n') {}
}


funciones.h
Código:
#ifndef YA_INCLUIDOS_FUNCIONES_H
#define YA_INCLUIDOS_FUNCIONES_H

#include "global.h"

#endif /* YA_INCLUIDOS_FUNCIONES_H */


global.h
Código:
#ifndef GLOBAL_H
#define GLOBAL_H

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

#endif /* GLOBAL_H */


Bien, lo que yo no entiendo es ¿cómo puede el compilador hallar la función flush_in en main.c si el header (funciones.h) ni siquiera exporta el prototipo?

Pido disculpas si la pregunta es muy noob, pero yo no la sé :D ...









En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.414


ASMático


Ver Perfil WWW
Re:
« Respuesta #1 en: 2 Noviembre 2014, 16:39 pm »

El caso es que se compilan los .c por separado. Y luego, al linkear, se linkean ambos a la vez.

Para que main compile, requiere saber cómo es la función, que es un dato que le otorga el .h


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.908


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: No entiendo por qué se puede usar esta función ¡si no debiera!
« Respuesta #2 en: 2 Noviembre 2014, 18:36 pm »

En el caso de C se puede llamar a una funcion no declarada, no lo hagas igual, no tiene utilidad y si puede generar problemas.

http://www.geeksforgeeks.org/g-fact-95/
http://www.geeksforgeeks.org/g-fact-28/
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
tecno46

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: No entiendo por qué se puede usar esta función ¡si no debiera!
« Respuesta #3 en: 6 Noviembre 2014, 20:36 pm »

Gracias por las respuestas.

Entiendo que para usar una función primero hay que declararla ¿verdad? antes que sea utilizada (por lo menos el prototipo de esta) pues bien, eso no ocurre en este caso, porque el archivo funciones.h incluido por main NO CONTIENE LA DECLARACIÓN DE LA FUNCIÓN FLUSH_IN() ¡tampoco su implementación! y aún así el programa compila y se ejecuta correctamente.

De alguna forma que no entiendo el compilador enlaza main y flush_in(), aún sin necesidad de haber sido explícitamente declarada antes de usarla.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.908


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: No entiendo por qué se puede usar esta función ¡si no debiera!
« Respuesta #4 en: 6 Noviembre 2014, 20:49 pm »

Entiendo que para usar una función primero hay que declararla ¿verdad?

No, en C no es verdad.

En el caso de C se puede llamar a una funcion no declarada, no lo hagas igual, no tiene utilidad y si puede generar problemas.

http://www.geeksforgeeks.org/g-fact-95/
http://www.geeksforgeeks.org/g-fact-28/
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
No entiendo que es lo que pasa en esta red.
Hacking Wireless
magito 7 4,571 Último mensaje 14 Junio 2010, 12:31 pm
por lamaruja
No entiendo la funcion del cin en este programa Arreglo de caracteres
Programación C/C++
CATBro 5 2,402 Último mensaje 11 Julio 2012, 00:46 am
por CATBro
No entiendo que esta mal(en C)
Programación C/C++
oxi12pek 7 2,240 Último mensaje 2 Noviembre 2012, 18:17 pm
por oxi12pek
No entiendo esta linea del programa
Programación C/C++
ProyectoX 5 1,850 Último mensaje 30 Noviembre 2012, 23:11 pm
por ProyectoX
(Consulta) No entiendo la función libusb_control_transfer
Programación C/C++
class_OpenGL 5 2,222 Último mensaje 27 Junio 2017, 22:10 pm
por aurquiel
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines