Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Regla 0x0205h: En archivos .c la inclusión de la cabecera propia debe figurar en primer lugar

Comentarios, documentacion y organizacion de archivos (0x02XX)

Universidad Nacional de Río Negro

0x0205h: En archivos .c la inclusión de la cabecera propia debe figurar en primer lugar

Enunciado normativo

DEBE incluirse primero la cabecera propia del módulo en el archivo .c correspondiente (modulo.c incluye "modulo.h" antes que cualquier otra cabecera de usuario). NO DEBE postergarse esa inclusión detrás de otras.

La cabecera propia es la primera que se incluye en el archivo.

¿Por qué existe esta regla?

El problema

Cuando modulo.c incluye modulo.h antes que nada, el compilador procesa la cabecera en el estado más limpio posible. Si modulo.h usa un tipo o una macro que no incluye por sí misma, el error aparece inmediatamente y delata que la cabecera no es autosuficiente. Si en cambio se incluye después de <stdio.h>, el error puede quedar enmascarado porque otra cabecera ya trajo la definición que faltaba.

En resumen: incluir la cabecera propia primero es una prueba automática de autosuficiencia del encabezado, un principio de diseño de interfaces.

Consecuencias de violarla

Tipo de consecuenciaEfecto concreto
CompilaciónUn header no autosuficiente compila por casualidad y falla en otro orden.
EnlazadoDeclaraciones implícitas escondidas pueden generar símbolos mal tipados.
MantenibilidadReordenar los #include rompe la compilación sin cambiar la lógica.
PortabilidadEn otro compilador, el orden de los encabezados cambia y aflora el fallo.
LegibilidadNo se ve de un vistazo el contrato público del módulo.

Fundamento en el estándar y en la cátedra

El estándar define el #include de forma textual: el contenido se inserta en el punto de la directiva (§6.10.2), por lo que el orden importa. La cátedra exige la cabecera propia primero para garantizar que cada .h sea autosuficiente, complementando 0x5003h: Utilizá guardas de inclusión en todos los archivos de cabecera (guardas de inclusión) y 0x5005h: Organizá la estructura de tus archivos .c de forma estándar (estructura de archivo).

Alcance y excepciones

Aplica a todo .c que tenga una cabecera homónima. Si el archivo .c no tiene cabecera propia (por ejemplo, un programa de un solo archivo), la regla no se activa. Esta regla se combina con el orden general de 0x5005h: Organizá la estructura de tus archivos .c de forma estándar, que agrupa primero el propio módulo y luego las bibliotecas.

Ejemplos exhaustivos

❌ Contraejemplo 1 — Cabecera propia al final

#include <stdio.h>
#include "otra_cosa.h"
#include "mi_modulo.h"

Por qué falla: mi_modulo.h recibe el contexto ya contaminado por las otras cabeceras; si le falta una definición, el error no se detecta.

❌ Contraejemplo 2 — Cabecera propia ausente

#include <stdio.h>
#include <stdlib.h>

int procesar_modulo(int x);

Por qué falla: el .c redefine la interfaz de su módulo sin incluir la cabecera, de modo que nada verifica que la firma coincida con la declarada en modulo.h.

✅ Ejemplo conforme 1 — Cabecera propia primero

#include "mi_modulo.h"

#include <stdio.h>
#include <stdlib.h>

Justificación: la cabecera se procesa antes que el resto y actúa como prueba de autosuficiencia; el grupo de bibliotecas queda separado visualmente.

✅ Ejemplo conforme 2 — Módulo con dependencias internas

#include "pila.h"

#include "memoria.h"
#include <stddef.h>
#include <stdlib.h>

struct pila
{
    int *datos;
    size_t cantidad;
    size_t capacidad;
};

Justificación: primero el contrato público, después las dependencias internas y del sistema; el orden refleja la jerarquía real del módulo.

⚠️ Casos límite

Cómo detectarla

HerramientaComandoSeñal
Revisión manualPrimer #include distinto del homónimo del .c.
gaffgaff check archivo.cRegla 0x0205h: cabecera propia no es la primera.
gccgcc -Wall -Wextra -std=c11 -c modulo.cUn error al compilar modulo.h solo revela el problema.

Checklist de autocontrol

Reglas relacionadas