[Resolvido] Criando e compilando seus próprios cabeçalhos em C

Iniciado por mhkgalvez, 02 de Junho de 2010, 13:34

tópico anterior - próximo tópico

mhkgalvez

Olá pessoal, estou desenvolvendo uma aplicação em C. Quero, porém, criar um cabeçalho com as funções do meu programa, a fim de não encher o arquivo principal.

Normalmente eu compilo usando "gcc -o main.c nome_do_executavel"

Mas quando tem cabeçalho, como declaro no programa principal e como compilo?
"A quem vencer, eu o farei coluna no templo do meu Deus, e dele nunca sairá; e escreverei sobre ele o nome do meu Deus, e o nome da cidade do meu Deus, a nova Jerusalém, que desce do céu, do meu Deus, e também o meu novo nome."

Darcamo

Mesmo se você só tiver esse arquivo main.c o comando que você mencionou não vai funcionar. O nome do executável deve vir após o "-o" e depois você pode colocar quantos arquivos tiver.

Por exemplo, suponha que você tenha um arquivo principal main.c, um arquivo com cabeçalhos de funções func.h e um arquivo com a implementação dessas funções chamado func.c. Pode compilar tudo para gerar um executável com o comando
gcc -o nome_do_executavel  main.c func.h func.c
A ordem não importa, exceto que o "nome_do_executavel" deve vir imediatamente depois do "-o".

mhkgalvez

#2
Ah sim, eu só troquei a ordem sem querer.

Mas quanto à declaração. Eu dei uma pesquisada e deve estar entre aspas para declarar cabeçalhos criados por mim:

#include <stdlib.h>
#include "meuCabeçalho.h"


Já tentei sem o .h e nem assim. Como devo declarar?
"A quem vencer, eu o farei coluna no templo do meu Deus, e dele nunca sairá; e escreverei sobre ele o nome do meu Deus, e o nome da cidade do meu Deus, a nova Jerusalém, que desce do céu, do meu Deus, e também o meu novo nome."

Darcamo

CitarAh sim, eu só troquei a ordem sem querer.

Mas quanto à declaração. Eu dei uma pesquisada e deve estar entre aspas para declarar cabeçalhos criados por mim:

Exato. Entre aspas para os arquivos que você criar e entre <> para os arquivos do sistema.

Abaixo segue um exemplo simples com 3 arquivos: main.c, util.h e util.c.

Arquivo main.c
#include <stdio.h>
#include "util.h"

int main(int argc, char *argv[])
{
    printf("2 multiplicado por 3 é igual a %d\n", multiplicaPorTres(2));
    return 0;
}


Arquivo util.h
#ifndef UTIL_H
#define UTIL_H

int multiplicaPorTres(int entrada);

#endif


Arquivo util.c
#include "util.h"

int multiplicaPorTres(int entrada)
{
    return entrada * 3;
}


Compila com o comando
gcc -o main main.c util.h util.c

Note que o arquivo com a implementação (util.c) inclui o arquivo com as declarações (util.h) e o arquivo principal inclui apenas o arquivo com a implementação. No entanto na hora de compilar todos os arquivos são compilados. Essa é a maneira mais usual.

fpissarra

Uma vez que o arquivo de cabeçalho é incluido no fonte em C, não é necessário compilá-lo diretamente na linha de comando com o GCC. Assim, no exemplo de Darcamo, a linha de comando ficaria assim:

gcc -o main main.c util.c

Se o arquivo .h estiver em outro diretório que não o mesmo no qual se encontra o arquivo .C, você sempre pode usar a opção -I do compilador para indicar o diretório onde os .h serão procurados.