programa - ¿Cómo puedo crear archivos de cabecera C
incluir header en c (2)
- Abra su editor de texto favorito
- Crea un nuevo archivo llamado whatever.h
- Pon tus prototipos de funciones en él
HECHO.
Ejemplo whatever.h
#ifndef WHATEVER_H_INCLUDED
#define WHATEVER_H_INCLUDED
int f(int a);
#endif
Nota: incluya guardias (comandos de preprocesador) agregados gracias a luke. Evitan incluir el mismo archivo de encabezado dos veces en la misma compilación. Otra posibilidad (también mencionada en los comentarios) es agregar #pragma once
pero no se garantiza que sea compatible con cada compilador.
Ejemplo whatever.c
#include "whatever.h"
int f(int a) { return a + 1; }
Y luego puede incluir "whatever.h" en cualquier otro archivo .c y vincularlo con el archivo de objetos de whatever.c.
Me gusta esto:
sample.c
#include "whatever.h"
int main(int argc, char **argv)
{
printf("%d/n", f(2)); /* prints 3 */
return 0;
}
Para compilarlo (si usa GCC):
$ gcc -c whatever.c -o whatever.o
$ gcc -c sample.c -o sample.o
Para vincular los archivos para crear un archivo ejecutable:
$ gcc sample.o whatever.o -o sample
Puedes probar la muestra:
$ ./sample
3
$
Quiero poder crear una colección de funciones en un archivo de encabezado que pueda #incluir en uno de mis Programas C.
Los archivos de encabezado pueden contener cualquier código C válido, ya que el preprocesador los inyecta en la unidad de compilación antes de la compilación.
Si un archivo de encabezado contiene una función y está incluido en múltiples archivos .c
, cada archivo .c
obtendrá una copia de esa función y creará un símbolo para ella. El vinculador se quejará de los símbolos duplicados.
Es técnicamente posible crear funciones static
en un archivo de cabecera para su inclusión en múltiples archivos .c
. Aunque esto generalmente no se hace porque rompe con la convención de que el código se encuentra en archivos .c
y las declaraciones se encuentran en archivos .h
.
Ver las discusiones en C / C ++: Función estática en el archivo de encabezado, ¿qué significa? para más explicaciones