Alguém pode explicar como criar um arquivo de cabeçalho em C com um exemplo simples do começo ao fim.
Alguém pode explicar como criar um arquivo de cabeçalho em C com um exemplo simples do começo ao fim.
Respostas:
foo.h
#ifndef FOO_H_ /* Include guard */
#define FOO_H_
int foo(int x); /* An example function declaration */
#endif // FOO_H_
foo.c
#include "foo.h" /* Include the header (not strictly necessary here) */
int foo(int x) /* Function definition */
{
return x + 5;
}
main.c
#include <stdio.h>
#include "foo.h" /* Include the header here, to obtain the function declaration */
int main(void)
{
int y = foo(3); /* Use the function here */
printf("%d\n", y);
return 0;
}
Para compilar usando o GCC
gcc -o my_app main.c foo.c
#ifndef MY_HEADER_H
# define MY_HEADER_H
//put your function headers here
#endif
MY_HEADER_H
serve como um guarda de dupla inclusão.
Para a declaração da função, você só precisa definir a assinatura, ou seja, sem nomes de parâmetros, como este:
int foo(char*);
Se você realmente quiser, também pode incluir o identificador do parâmetro, mas não é necessário porque o identificador seria usado apenas no corpo de uma função (implementação), que, no caso de um cabeçalho (assinatura do parâmetro), está ausente.
Isso declara a função foo
que aceita ae char*
retorna uma int
.
No seu arquivo de origem, você teria:
#include "my_header.h"
int foo(char* name) {
//do stuff
return 0;
}
extern
declarações de variáveis e funções em um arquivo separado, historicamente chamado de cabeçalho , incluído #include
na frente de cada arquivo de origem. As funções da biblioteca padrão, por exemplo, são declaradas em cabeçalhos como <stdio.h>
".
myfile.h
#ifndef _myfile_h
#define _myfile_h
void function();
#endif
myfile.c
#include "myfile.h"
void function() {
}
void function();
como uma declaração não impede chamadas como function(42);
. Use void
na declaração comovoid function(void);
os arquivos de cabeçalho contêm protótipos para funções definidas em um arquivo .c ou .cpp / .cxx (dependendo se você estiver usando c ou c ++). Você deseja colocar # ifndef / # define em torno do seu código .h para que, se você incluir o mesmo .h duas vezes em diferentes partes dos seus programas, os protótipos sejam incluídos apenas uma vez.
client.h
#ifndef CLIENT_H
#define CLIENT_H
short socketConnect(char *host,unsigned short port,char *sendbuf,char *recievebuf, long rbufsize);
#endif /** CLIENT_H */
Em seguida, você implementaria o .h em um arquivo .c da seguinte forma:
client.c
#include "client.h"
short socketConnect(char *host,unsigned short port,char *sendbuf,char *recievebuf, long rbufsize) {
short ret = -1;
//some implementation here
return ret;
}