Por que o código não compila?

18/06/2019

13

C

Olá a todos.

Sou novo na programação e, embora esteja pegando bem os conceitos e a lógica, tem um problema que não estou encontrando solução.

Estou tentando criar minha primeira biblioteca (arquivo header), mas estou tendo um problema quanto a compilação dos arquivos. Estou usando 3 arquivos, um com a função main ( .c), outro com os protótipos das funções da biblioteca ( .h) e um último com o corpo das funções ( .c). Acontece que quando eu faço o arquivo .h com cabeçalho e corpo das funções, o código compila e executa normalmente. Quando eu tiro o corpo das funções do .h, deixando somente os protótipos, e passo o corpo pra outro aquivo .c, o código não compila e muito menos dá erro de sintaxe.

A seguir, o arquivo main.c

#include <stdio.h>
#include <stdlib.h>

#include "calculos.h"


int main(){
	
	printf("Usando headers\\\\n");
	int y = 5;
	int quad = quadrado(y);
	int cub = cubo(y);
	
	printf("Quadrado de %d: %d\\\\n", y, quad);
	printf("Cubo de %d: %d\\\\n", y, cub);
	return 0;
}


Essa é a biblioteca somente com o protótipo das funções (calculos.h):

int quadrado(int x);
int cubo(int x);


E este último arquivo, é o corpo das funções (calculos.c):

#include "calculos.h"

int quadrado(int x){
	return x*x;
}

int cubo(int x){
	return x*x*x;
}


Quando eu mando compilar o arquivo main, nada acontece, muito menos o executável é criado. Porém, quando eu apago o arquivo calculos.c, e deixo as funções do header completas, o código compila e executa.

Alguém tem ideia do que pode ser?
Responder

Posts

06/07/2019

João Júnior

Olá a todos.

Sou novo na programação e, embora esteja pegando bem os conceitos e a lógica, tem um problema que não estou encontrando solução.

Estou tentando criar minha primeira biblioteca (arquivo header), mas estou tendo um problema quanto a compilação dos arquivos. Estou usando 3 arquivos, um com a função main ( .c), outro com os protótipos das funções da biblioteca ( .h) e um último com o corpo das funções ( .c). Acontece que quando eu faço o arquivo .h com cabeçalho e corpo das funções, o código compila e executa normalmente. Quando eu tiro o corpo das funções do .h, deixando somente os protótipos, e passo o corpo pra outro aquivo .c, o código não compila e muito menos dá erro de sintaxe.

A seguir, o arquivo main.c

#include <stdio.h>
#include <stdlib.h>

#include "calculos.h"


int main(){
	
	printf("Usando headers\\\\\\\\n");
	int y = 5;
	int quad = quadrado(y);
	int cub = cubo(y);
	
	printf("Quadrado de %d: %d\\\\\\\\n", y, quad);
	printf("Cubo de %d: %d\\\\\\\\n", y, cub);
	return 0;
}


Essa é a biblioteca somente com o protótipo das funções (calculos.h):

int quadrado(int x);
int cubo(int x);


E este último arquivo, é o corpo das funções (calculos.c):

#include "calculos.h"

int quadrado(int x){
	return x*x;
}

int cubo(int x){
	return x*x*x;
}


Quando eu mando compilar o arquivo main, nada acontece, muito menos o executável é criado. Porém, quando eu apago o arquivo calculos.c, e deixo as funções do header completas, o código compila e executa.

Alguém tem ideia do que pode ser?


Está usando CodeBlocks? Tu tem que criar um Projeto, daí a IDE "linka" os arquivos. Supondo que tu esteja usando a IDE mencionada, faça:
1 - New File;
2 - Project;
3 - Empty Projetct
4 - Go;
5 - Next;
6 - Project Title (Informe o nome do seu Projeto;
7 - Escolha a Pasta de repositório
8 - Finish;
9 - New File (adicione os arquivos no projeto).

Copiei e colei a sua codificação e funcionou perfeitamente:

Main.c
#include<stdio.h>
#include<stdlib.h>

#include "Teste.h"

int main(){

    printf("Usando headers\\n");
    int y = 5;
    int quad = quadrado(y);
    int cub = cubo(y);

    printf("Quadrado de %d: %d\\n", y, quad);
    printf("Cubo de %d: %d\\n", y, cub);

    system("pause");
    return 0;
}


Calculos.h
int quadrado(int x);
int cubo(int x);


Calculos.c
#include<stdio.h>
#include<stdlib.h>

#include "Teste.h"

int quadrado(int x){
    return x*x;
}

int cubo(int x){
    return x*x*x;
}
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar