Bom dia. Comecei um estudo em C mas estou tendo problemas justamente na aula final sobre uso de diversos arquivos. Ao fazer um programa para calcular a área de um retângulo com sua delcaração feita num arquivo “calc…h”, a função no “calc…c” e a chamada no “main.c”, dá o seguinte erro de compilação:
Eu já testei tudo num arquivo só e funcionou beleza, então zero erro de sintaxe.
Alguma dica?
Se o código fonte está correto, então pode ser um problema no comando que vc está usando pra compilar. Precisa compilar o calc.c para calc.o e daí incluí-lo na compilação do main.c. Nessas horas o Makefile pode ajudar.
No código main.c, retire o poligono.h e coloque o poligonos.c, dentro do codigo poligonos.c já esta inportando o poligonos.h, depois execute o código main.c
Cara, é brincadeira, funfou aqui. Eu até pensei nisso que vc disse sobre o arquivo já estar importado no outro mas o outro não tinha nenhum que o chamasse enquanto os demais pareciam redundantes, mas o professor compilou no vídeo assim e foi, então não teimei com o código. Mas vendo que vc reparou a mesmíssima coisa aí não tive dúvidas, fui lá mudei e deu certo de primeira. Valeu mesmo. Resolvido.
A diretiva include faz com que o conteúdo do outro arquivo seja inserido dentro daquele arquivo durante o preprocessamento.
Incluir um arquivo .c não é comum, e fazendo isso, o resultado final é que tudo virou um único “arquivo” na memória, pra ser compilado. Tecnicamente funciona, mas na prática não faz sentido.
Projetos grandes se beneficiam dessa estratégia de múltiplos arquivos, exatamente porque eles são compilados cada um para seu objeto, e no final da compilação de todos eles é realizado o processo de ligação (link/linkagem) criando o executável final. Ao fazer uma alteração em um dos arquivos, somente aquele arquivo será compilado e a linkagem vai pegar esse novo objeto e criar um novo executável. Isso reduz o tempo de compilação do projeto todo dezenas/centenas de vezes.
Portanto, o correto é incluir sempre o cabeçalho do arquivo “.h” e deixar para o processo de ligação resolver as referências.
O problema encontrado no início do tópico é que o compilador compilou apenas o arquivo main.c, mas o processo de ligação não conseguiu achar a referência ao calcAreaRetangulo. O correto é configurar o projeto para compilar também o arquivo calc.c, gerando o objeto dele, e configurar o projeto para, no processo de ligação, adicionar também o calc.o. Dessa forma o uso de diferentes arquivos fontes funcionará como em projetos grandes.
Diferentes compiladores/IDE vão funcionar de forma diferente. O mais básico seria usar a dobradinha gcc/make para isso. Porém, se você deseja usar o “Dev C++”, precisará ver na documentação quais são os estilos de projeto que ele usa, se é com make ou no estilo do Visual Studio que tem configurações dentro do programa para definir os arquivos a serem compilados e os diretórios para adicionar ao processo de linkagem.
Para projetos pequenos é possível que o compilador faça essa tarefa. No gcc por exemplo, use o comando gcc calc.c main.c -o meuprograma e o compilador também vai incluir o arquivo objeto calc.o na ligação, e o programa vai funcionar.