Ayuda Con Header En C

Iniciado por ZedGe, 11 Diciembre 2011, 17:34 PM

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

ZedGe

Alguien me Explica las siguientes preguntas sobre el uso de HEADER en C??

1.- Que Es?
2.- Para Que Sirver?
3.- Por que es diferente a llamar directamente a una función de un archivo??
4.- Como se Usa.. me podrían decir ejemplo con un código simple??


Lo que he entendido es que es parte de un código que se usa para no copiarlo varias veces en diferentes archivos....

x64core

Creo que te referis a los archivos .h no?
si es asi que mejor que wikipedia:
http://es.wikipedia.org/wiki/Archivo_de_cabecera

ZedGe

Así es, ya lo había visto pero aun así no entendí para que sirve y como emplearlo

Ferno

Básicamente en un header, vos codeás los prototipos de todas las funciones que utilizarás en el source, además de constantes, algunas variables de ese ámbito.
Se puede dividir un programa entero de un solo source, a varios sources diferentes (con sus respectivos header files) y al momento de juntarlos a todos en el source principal (generalmente donde se incluye al main) sólo debes incluir estos .h (como, por ejemplo, hacés con stdio, stdlib, etc).
Gracias a esto, podés utilizar las funciones que declaraste en los header, y que implementaste en su respectivo source! (un archivo .h para declarar, un archivo .c o .cpp para implementar).
Espero que se haya aclarado un poco!

ZedGe

Es decir en un archivo .c puedo crear mis funciones y en un .h puedo poner algunas variables "globales" y que mas de 1 funcion puede usar?

x64core

:P
cuando agregas un archivo .h le indicas al preprocesador que vas a utilizar una funcion o variable , contantes que se encuentra
en ese archivo.  bueno esto se hace por legibilidad ya que todo el codigo en un archivo cpp no seria muy ordenado digamos
tambien por ejemplo tenemos el archivo windows.h que en donde se tiene que agregar para usar las APIs ya que en este
archivo contiene las direcciones de los archivos que son necesario para usarlas :P
en estos archivos tambien pueden haber includes, osea que pueden depender de otros .h
asi cuando es compilado se enlaza los objetos que has ocupado en tu cpp asi sin tener que agregar codigo por codigo :)

EDIT:
Ya habia respondido Ferno :xD no voy a borrar lo que escribi :xD
Advertencia - mientras estabas escribiendo, fueron publicadas 2 respuestas. Probablemente desees revisar tu mensaje.

ZedGe

Es decir si creo la funcion Suma(int a,int b) en un .c en el .h puedo crear mis variables  resultadosuma??

la cual despues podria usar en otro .h para hacer una operacion matematica?

Ferno

#7
En el .h lo que haces es declarar las funciones que vas a implementar en el .c y utilizar en algún otro source. Es decir, declarar los prototipos, constantes, etc.
Este archivo .h junto con su respectivo .c, funcionará como una entidad aparte o una parte de tu programa entero.

Las ventajas que tiene es que puedes utilizarlo en todos los programas que quieras, porque al ser una entidad aparte, éste funciona de tal manera (dependiendo de las precondiciones y postcondiciones) que no cambiará, independientemente del programa en el que lo utilices. Estará disponible siempre y cuando incluyas el header en el .c donde utilizarás las funciones que éste posea. Además de que simplifica mucho el debugging porque si ya trabajaste con esta función creada, sabes que no contiene ningún error siempre y cuando estés cumpliendo las precondiciones!

Ejemplo:
Vos querés hacer un programa que haga un número elevado a otro (potencia).
Pero claro, por qué no mejor dividirlo, creo una función que potencie dos números en un archivo aparte, y luego podré utilizarla no sólo en éste, sino en todos los programas que se me antojen. Pues bien, creo un .h y declaro mi funcion "potencia". Ahora creo un .c, e implemento mi función potencia (incluyendo, obviamente al header para que reconozca el prototipo de la función).

Pues bien, ya tengo mi .h con una función potencia y su respectivo .c donde está implementada. Ahora puedo crear todos los programas que quiero, incluyendo el .h donde está mi función potencia y utilizarla! Así como incluyes el stdio para utilizar scanf y printf o el stdlib para alocar y liberar memoria, etc.

Te recomiendo leer sobre TDAs. Justamente, este conjunto de archivos header y source se conoce, comúnmente, como Tipo de Dato Abstracto.

PD: Quizás te oscurecí más de lo que te aclaré, pero leyendo algo sobre TDA te irás dando cuenta, cualquier cosa vuelve a preguntar y trataré de aclararlo mejor :P

ZedGe

En realidad estoy haciendo un programa para la Universidad, en el cual es solo 1 proyecto pero que de todas formas me piden usar Headers, El prox es de TDA y  ya me e informado sobre ello y listas enlazadas, así que te entendí.... solo me queda esta duda, al crear un .h puedo usarlo o llamarlo desde otro proyecto??

Ferno

En teoría sí. Pensalo análogamente como una librería.