Arquivos #include .c ou .h ?

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Arquivos #include .c ou .h ?

Mensagempor alessandro » 07 Mar 2007 08:43

Há coisas que deixamos passar por despercebidas e depois de algum tempo ficam martelando na nossa cabeça...

Qual a diferença entre salvar configurações, definições em um arquivo .c ou .h? Há alguma diferença na complição final manter dos dados em uma dessas extenções? Sempre usei .c, mas vejo que boa parte das pessoas usam .h ou mesclam essas opções.



Alessandro
Alessandro
Avatar do usuário
alessandro
Byte
 
Mensagens: 278
Registrado em: 12 Out 2006 19:32

Re: Arquivos #include .c ou .h ?

Mensagempor andre_luis » 07 Mar 2007 10:50

Voce levantou uma questão interessante. Realmente, nao parece haver um consenso ou padronizacao a respeito disso.

Eu, particularmente, coloco definicoes no .h e funcoes no .c
Mas, e as macros ? Eu coloco no .h pois para mim sao definicoes.

+++
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor alessandro » 07 Mar 2007 11:01

Realmente não sei se a separação de usar um ou outro é vantagem em alguma coisa ou padronização entre funções e definiçoes.

Talvez cada pessoa tenha alguma opinião ou use de forma diferente já que possívelmente em relação a compilação e resultado final sejam parecidos.



Alessandro
Alessandro
Avatar do usuário
alessandro
Byte
 
Mensagens: 278
Registrado em: 12 Out 2006 19:32

Mensagempor chipselect » 07 Mar 2007 14:31

#include "arquivo.c"

Eu acho que fica um pouco estranho. Não sei como é o padrão em compiladores pra microcontroladores, mas para PC, esse tipo de coisa quase não se vê em programas profissionais.

Quando preciso incluir funções que vão em um arquivo .c, geralmente incluo o .h dele e o .c é compilado e linkado automaticamente, utilizando a ferramenta MAKE ou qualquer coisa do tipo.

Talvez para microcontroladores, isso não importa muito porque os programas são bem pequenos e talvez os compiladores nem possuem um utilitário tipo o MAKE, pois a necessidade de gerência de projeto seja muito pequena, quase zero.

No caso de microcontrolador, geramente eu crio uma lib pra não incluir um .c, incluir só o .h é apenas um padrão de trabalho.
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

Mensagempor andre_luis » 07 Mar 2007 15:08

Acho que a prática de se realizar 'include' em arquivos .c se deve mais à uma questão organizacional, como o caso que voce citou das bibiotecas, pois fica muito mais inteligivel e portável um programa que trabalhe com driver's de acesso a dispositivos de hardware - por exemplo - encapsulados num único arquivo.

chipselect escreveu:#include "arquivo.c"
Eu acho que fica um pouco estranho...


No caso, pro compilador, isso funciona como se voce estivesse meramente substituindo todo o conteudo do arquivo pela diretiva, agindo como um 'carimbo'; o que significa que isso só vai funcionar se o conteúdo do arquivo incluido estiver de acordo com a área onde o arquivo for incluída ( protótipo, declaração, execução )

+++
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor __JEREK__ » 07 Mar 2007 21:47

eu particularmente faço o programa principal em .C e o resto todo em .h

as vezes quando vc baixa um exemplo da net, onde são usados arquivos .C como biblioteca você tem que ficar procurando qual é o arquivo .C principal para compilar, que geralmente o programador não deixa muito claro quem é o principal.

programa principal em .C (um arquivo C por projeto apenas)

o resto (biblioteca, definições, etc) em .h
__JEREK__
Byte
 
Mensagens: 216
Registrado em: 11 Out 2006 17:53
Localização: BA

Mensagempor Nakai » 09 Mar 2007 10:36

Eu uso o PICC da Hi-Tech e não uso #include "arquvo.c" eu só uso #include"arquvo.h". O arquivo.h contem protótipos e definições. Na hora da compilação são compilados todos os arquivos e são gerados os .obj depois o linker junta todos estes .obj e .lib pra fazer o .hex. O hitech dá pra gerar os .lib mas ainda não testei, dizem que o código fica menor pois a função só será incluída se ela for usada.
Nakai
Bit
 
Mensagens: 27
Registrado em: 23 Out 2006 15:34
Localização: Maringá-Pr

Mensagempor chipselect » 09 Mar 2007 19:51

Jerek

isso aí é tarefa do make
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

Mensagempor __JEREK__ » 10 Mar 2007 15:43

chipselect escreveu:Jerek

isso aí é tarefa do make


olá chipselect, tudo blz??

desculpe, eu não entendi, o que é make??
__JEREK__
Byte
 
Mensagens: 216
Registrado em: 11 Out 2006 17:53
Localização: BA

Mensagempor Red Neck Guy » 10 Mar 2007 17:09

Os arquivos *.h são Headers, que na verdade seriam a principio para conter informações referentes ao *.C a que se referem...
Uma biblioteca bem escrita, por exemplo, teria dois arquivos. Um C com o código das funções, variaveis globais e tal. E outro arquivo H com os protótipos de função, definições de tipo, identificadores utilizados no escopo e assim por diante.
Nos bons livros de C, tipo o C completo e total do Herbert Schild, isso é comentado.
Esse blá-blá-blá todo parece bobagem, mas pense quando se trabalha em equipes, não tem como usar esses códigos sem padronização nenhuma...
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Mensagempor chipselect » 10 Mar 2007 17:11

boa tarde Jerek

O Make é muito comum em Unix, é uma ferramenta para ajudar na compilação, ele roda baseado em um script próprio, localiza os arquivos relevantes, compila e efetua o link.

Quando a gente compila o kernel do Linux, rodamos o make... ele faz tudo que precisa pra compilar. Geralmente indicamos o "arquivo de script", como por exemplo, os comandos:
$make config
$make clean

Quando um código fonte tem vários arquivos, geralmente ele vem com um arquivo script do make junto, para facilitar as coisas. Infelizmente GCC, Visual Studio e Borland CBuilder utilizam "make" diferentes.

Quando utilizamos muito os ambientes integrados de desenvolvimentos, ficamos "isolados" desses detalhes de programação, mas esses ambientes muito provavelmente utilizam alguma forma de "make".
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

Mensagempor andre_luis » 12 Mar 2007 10:00

Aquino escreveu:...arquivo H com os protótipos de função, definições de tipo, identificadores utilizados no escopo e assim por diante...


A inclusão também do protótipo no .H é coerente quando se coloca os includes no início do arquivo. Acredito que isso ( includes apenas no início ) deveria ser também uma regra. Já vi programa com um #include no meio do arquivo.

+++
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor chipselect » 12 Mar 2007 12:51

#include no meio do arquivo?

afff, nem quero saber do resto do código...
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x