Preciso de ajuda com estudo da linguagem C

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:

print

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.

1 curtida

Não tão rápido como está o cabeçalho .h e a definição no arquivo .c? Esse erro diz basicamente que há divergência nos dois arquivos

1 curtida

Então, esse estudo estou fazendo num terminal windows.
A compilação eu faço pelo Dev C++

print
print 1
print 2
print 3
print 4

Aí está tudo que eu fiz.

Basicamente só copiei manualmente o que esse professor explicou e executou no vídeo a baixo a partir do minuto 15.

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


Captura de tela de 2024-12-06 19-56-27

1 curtida

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.

1 curtida

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.

1 curtida

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.

Realmente deu certo,
Captura de tela de 2024-12-07 10-27-57
Captura de tela de 2024-12-07 10-30-13

Sua explicação é boa, você é professor.

Este tópico foi fechado automaticamente 3 dias depois da última resposta. Novas respostas não são mais permitidas.