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 0x0204h: Control de longitud máxima de archivos de código (máx 500 líneas)

Comentarios, documentacion y organizacion de archivos (0x02XX)

Universidad Nacional de Río Negro

0x0204h: Control de longitud máxima de archivos de código (máx 500 líneas)

Enunciado normativo

NO DEBE superarse las 500 líneas por archivo fuente .c o de cabecera .h. Si un módulo excede ese tamaño, DEBE dividirse en módulos cohesivos.

El límite se mide sobre el archivo completo.

¿Por qué existe esta regla?

El problema

Un archivo largo suele ser un archivo con demasiadas responsabilidades. Al leerlo, el estudiante no puede mantener en la cabeza todas las funciones y tipos que define, y cualquier cambio exige recompilar y volver a entender un contexto enorme. La longitud del archivo es un síntoma medible de acoplamiento bajo y cohesión baja.

La división en módulos, además, obliga a decidir qué es público y qué es privado, lo que prepara el terreno para los TAD de 0x301Dh: Diseñá los Tipos de Datos Abstractos utilizando punteros opacos.

Consecuencias de violarla

Tipo de consecuenciaEfecto concreto
CompilaciónNinguna: el compilador acepta archivos de miles de líneas.
Tiempo de compilaciónCada cambio menor recompila todo el archivo.
MantenibilidadVarias responsabilidades conviven y sus cambios se interfieren.
ReutilizaciónNo se puede llevar una parte sin arrastrar todo el archivo.
LegibilidadEs imposible ubicar una función rápidamente.

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

El estándar organiza el programa en unidades de traducción (§5.1.1) y no fija tamaños. La cátedra adopta 500 líneas como umbral razonable para un módulo de cátedra y como disparador de modularización, en línea con 0x2014h: Cada función debe caber en una sola idea y en 25 líneas (funciones de una sola idea) y 0x2005h: Cada función debe tener una única responsabilidad (Principio de Responsabilidad Única) (responsabilidad única).

Alcance y excepciones

Aplica a archivos escritos por el estudiante. Las tablas de datos generadas (por ejemplo, una tabla de senos o de caracteres) y el código autogenerado pueden exceder el límite si están claramente identificados. Un archivo de pruebas puede ser más largo si agrupa casos independientes.

Ejemplos exhaustivos

❌ Contraejemplo 1 — Todo el trabajo en un archivo

todo_junto.c (950 líneas)

Por qué falla: contiene el TAD pila, el TAD cola, la interfaz de usuario y las pruebas en el mismo archivo; ningún equipo puede modificarlo en paralelo sin conflictos.

❌ Contraejemplo 2 — Cabecera que declara todo el sistema

/* sistema.h: 800 líneas */
/* pila */
typedef struct pila pila_t;
void pila_push(pila_t *p, int x);
/* cola */
typedef struct cola cola_t;
void cola_push(cola_t *c, int x);
/* ...200 prototipos más... */

Por qué falla: la cabecera se convierte en un catálogo global; cualquier módulo que la incluya arrastra dependencias que no necesita.

✅ Ejemplo conforme 1 — Módulos separados por TAD

modulo_pila.c   (120 líneas)
modulo_pila.h   ( 25 líneas)
modulo_cola.c   (140 líneas)
modulo_cola.h   ( 28 líneas)

Justificación: cada archivo tiene una responsabilidad clara, se compila por separado y su cabecera expone solo la interfaz necesaria.

✅ Ejemplo conforme 2 — División de un archivo en riesgo

// antes: procesar.c (620 líneas)
// despues:
//   entrada.c   -> lectura y validacion
//   calculo.c   -> logica de negocio
//   salida.c    -> formateo e impresion

Justificación: se separaron tres responsabilidades; el conteo baja del umbral y cada módulo se prueba de forma aislada.

⚠️ Casos límite

Cómo detectarla

HerramientaComandoSeñal
wcwc -l *.c *.hArchivos por encima de 500 líneas.
gaffgaff check archivo.cLongitud máxima de archivo excedida.
Revisión manualVarios TAD o niveles de abstracción en un mismo archivo.

Checklist de autocontrol

Reglas relacionadas