utikawa
(usa Ubuntu)
Enviado em 29/05/2008 - 22:06h
Funciona da seguinte forma: os arquivos .c contém o código fonte em si. Os arquivos .h contém as definições, ou seja, estruturas, classes, enums, typedefs, etc.
Qual o motivo disso?
Vamos supor que você esteja criando um novo algoritmo de criptografia e que você vai vender a empresas que queiram utilizá-lo na transmissão de dados. Você não pode entregar o seu arquivo .c pois senão o seu segredo e fonte de renda será revelado! Assim você cria o arquivo .h que conterá as estruturas que definem tipos de dados sendo passados como parâmetros para funções, protótipos destas funções, etc.
Assim você compila o seu .c, gerando o arquivo objeto .o e entrega-o para seus clientes juntamente ao .h
O seu cliente então irá criar um programa com o include ao seu arquivo .h, chamará as funções, etc. Ao compilar o software do cliente, será passado como parâmetro o arquivo .o na linha de comando. Pronto! O seu cliente usou a sua função e você não precisou entregar o arquivo .c
Agora a pergunta: então isso só serve para sistemas proprietários? A resposta é: não!
A outra vantagem (e talvez a principal), você consegue reaproveitar os arquivos já compilados ao invés de ter que recompilar todo o software. É como funciona o kernel do linux: são milhares de arquivos .c que são compilados um de cada vez. Se um arquivo for alterado, apenas ele precisará ser recompilado e não todo o kernel.
E porque incluir um fonte.h dentro do fonte.c?
Como o arquivo .h contém as definições de estruturas, classes e etc, você o inclui para não ter que repetir todas estas definições dentro do .c
Assim o mesmo arquivo utilizado pelo cliente será utilizado pelo seu .c, reaproveitando o código!
Não sei se eu compliquei mais do que expliquei, qualquer coisa avise!!! :-)