¿Alguien puede explicar cómo crear un archivo de encabezado en C con un ejemplo simple de principio a fin?
¿Alguien puede explicar cómo crear un archivo de encabezado en C con un ejemplo simple de principio a fin?
Respuestas:
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;
}
C Principal
#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 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
sirve como guardia de doble inclusión.
Para la declaración de función, solo necesita definir la firma, es decir, sin nombres de parámetros, de esta manera:
int foo(char*);
Si realmente lo desea, también puede incluir el identificador del parámetro, pero no es necesario porque el identificador solo se usaría en el cuerpo de una función (implementación), que en el caso de un encabezado (firma del parámetro), falta.
Esto declara la función foo
que acepta a char*
y devuelve un int
.
En su archivo fuente, tendría:
#include "my_header.h"
int foo(char* name) {
//do stuff
return 0;
}
extern
declaraciones de variables y funciones en un archivo separado, históricamente llamado encabezado , que se incluye #include
al frente de cada archivo fuente. Las funciones de la biblioteca estándar, por ejemplo, se declaran en encabezados como <stdio.h>
".
myfile.h
#ifndef _myfile_h
#define _myfile_h
void function();
#endif
myfile.c
#include "myfile.h"
void function() {
}
void function();
como una declaración no impide llamadas como function(42);
. Usar void
en la declaración comovoid function(void);
Los archivos de encabezado contienen prototipos para las funciones que define en un archivo .c o .cpp / .cxx (dependiendo de si está utilizando c o c ++). Desea colocar # ifndef / # define alrededor de su código .h para que si incluye el mismo .h dos veces en diferentes partes de sus programas, los prototipos solo se incluyen una vez.
cliente.h
#ifndef CLIENT_H
#define CLIENT_H
short socketConnect(char *host,unsigned short port,char *sendbuf,char *recievebuf, long rbufsize);
#endif /** CLIENT_H */
Luego implementaría el .h en un archivo .c así:
cliente.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;
}