¿Qué significan las extensiones de archivo .c y .h para C?

5 minutos de lectura

¿Que significan las extensiones de archivo c y h para
Alex Mcp

Todo está en el título; súper simple, creo, pero es muy difícil buscar cosas sintácticas en cualquier lugar.

Estos son dos archivos de biblioteca de los que estoy copiando CS50.nety me pregunto por qué tienen dos extensiones diferentes.

¿Que significan las extensiones de archivo c y h para
Stefano Borini

.c : archivo c (donde está la acción real, en general)

.h : archivo de encabezado (para ser incluido con un preprocesador #include directiva). Contiene cosas que normalmente se consideran compartidas con otras partes de su código, como prototipos de funciones, cosas #definidas, declaraciones externas para variables globales (oh, el horror) y cosas por el estilo.

Técnicamente, podría poner todo en un solo archivo. Todo un programa en C. millones de líneas. Pero los humanos tendemos a organizar las cosas. Entonces crea diferentes archivos C, cada uno con funciones particulares. Eso es todo bonito y limpio. Entonces, de repente, te das cuenta de que un declaración que tiene en un archivo C dado debería existir también en otro archivo C. Así que los duplicarías. Por lo tanto, lo mejor es extraer la declaración y ponerla en un archivo común, que es el .h

Por ejemplo, en cs50.h encontrará lo que se denomina “declaraciones directas” de sus funciones. Una declaración directa es una forma rápida de decirle al compilador cómo se debe llamar a una función (por ejemplo, qué parámetros de entrada) y qué devuelve, para que pueda realizar una verificación adecuada (por ejemplo, si llama a una función con el número incorrecto de parámetros, se quejará).

Otro ejemplo. Suponga que escribe un archivo .c que contiene una función que realiza coincidencias de expresiones regulares. Desea que su función acepte la expresión regular, la cadena para hacer coincidir y un parámetro que indique si la comparación debe distinguir entre mayúsculas y minúsculas.

en el .c, por lo tanto, pondrás

bool matches(string regexp, string s, int flags) { the code }

Ahora, suponga que desea pasar las siguientes banderas:

0: si la búsqueda distingue entre mayúsculas y minúsculas

1: si la búsqueda no distingue entre mayúsculas y minúsculas

Y desea mantenerse abierto a nuevas banderas, por lo que no puso un valor booleano. jugar con números es difícil, así que define nombres útiles para estas banderas

#define MATCH_CASE_SENSITIVE 0
#define MATCH_CASE_INSENSITIVE 1

Esta información va en el .h, porque si algún programa quiere usar estas etiquetas, no tiene forma de conocerlas a menos que incluyas la información. Por supuesto, puede ponerlos en el .c, pero luego tendría que incluir el código .c (¡completo!), Lo cual es una pérdida de tiempo y una fuente de problemas.

  • Esto también puede ayudar: Esto también puede ayudar: stackoverflow.com/questions/3482948/…. Mucho de lo mismo, pero explicado de una manera ligeramente diferente.

    – spugm1r3

    17/09/2016 a las 20:08

¿Que significan las extensiones de archivo c y h para
Sinan Ünür

Por supuesto, no hay nada que diga que la extensión de un archivo de encabezado debe ser .h y la extensión de un archivo fuente C debe ser .c. Estas son convenciones útiles.

E:\Temp> type my.interface
#ifndef MY_INTERFACE_INCLUDED
#define MYBUFFERSIZE 8
#define MY_INTERFACE_INCLUDED
#endif

E:\Temp> type my.source
#include <stdio.h>

#include "my.interface"

int main(void) {
    char x[MYBUFFERSIZE] = {0};
    x[0] = 'a';
    puts(x);
    return 0;
}

E:\Temp> gcc -x c my.source -o my.exe

E:\Temp> my
a

  • ¡Gracias por esto! Pensé en las extensiones .h y .c eran obligatorios y nunca pensé lo contrario!

    – KeyC0de

    16 de febrero de 2017 a las 20:34

No son realmente archivos de biblioteca. Son solo archivos fuente. Como dijo Stefano, el .C El archivo es el archivo fuente C que en realidad usa/define la fuente real de lo que simplemente se describe en el .h archivo, el archivo de cabecera. El archivo de encabezado generalmente describe todos los prototipos y estructuras de funciones que se utilizarán en el archivo fuente real. Piense en ello como una referencia/apéndice. Esto es evidente al mirar el archivo de encabezado, como verá 🙂 Entonces, cuando desee usar algo que se escribió en estos archivos fuente, debe #include el archivo de encabezado, que contiene la información que el compilador necesitará saber.

  • Buena aclaración, gracias. Así que #incluyo , pero eso a su vez llama a las funciones reales que necesita de cs50.c. Esto es lo que asumo al leer los archivos, ¿es correcto?

    – Alex Mcp

    8 de noviembre de 2009 a las 3:12

  • Sí, así suele ser. Sin embargo, #include generalmente se reserva para los archivos que vienen con el compilador, como #include . Lo que desea es #include “cs50.h”, y asegúrese de que el compilador pueda acceder a él. , preferiblemente donde están sus otros archivos de origen.

    –Jorge Israel Peña

    8 de noviembre de 2009 a las 3:15

  • si no recuerdo mal, se desaconseja el uso de “”. siempre debe usar <> y ajustar el -I correctamente.

    – Stefano Borini

    8 de noviembre de 2009 a las 3:33

  • @Stefano Borini ver 6.10.2: Una directiva de preprocesamiento de la forma # include "q-char-sequence" new-line provoca el reemplazo de esa directiva por todo el contenido del archivo fuente identificado por la secuencia especificada entre el " delimitadores El archivo de origen nombrado se busca de una manera definida por la implementación. Si esta búsqueda no es compatible, o si la búsqueda falla, la directiva se reprocesa como si leyera # include <h-char-sequence> new-line

    – Sinan Ünür

    8 de noviembre de 2009 a las 4:14

El .c es el archivo fuente y .h es el archivo de cabecera.

Los archivos .c son archivos fuente que se compilarán. Los archivos .h se utilizan para exponer la API de un programa a otra parte de ese programa o a otro programa si está creando una biblioteca.

Por ejemplo, el programa PizzaDelivery podría tener 1 archivo .c con el programa principal y 1 archivo .c con funciones de utilidad. Ahora, para que la parte principal del programa pueda usar las funciones de utilidad, debe exponer la API, a través del prototipo de función, en un archivo .h, este archivo .h se incluye en el archivo .c principal.

1647589747 195 ¿Que significan las extensiones de archivo c y h para
Khaled Alshaya

.c : 'C' source code
.h : Header file

Por lo general, el .c los archivos contienen la implementación, y .h Los archivos contienen la “interfaz” de una implementación.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad