Regla 0x0204h: Control de longitud máxima de archivos de código (máx 500 líneas)
Comentarios, documentacion y organizacion de archivos (0x02XX)
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
.co 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 consecuencia | Efecto concreto |
|---|---|
| Compilación | Ninguna: el compilador acepta archivos de miles de líneas. |
| Tiempo de compilación | Cada cambio menor recompila todo el archivo. |
| Mantenibilidad | Varias responsabilidades conviven y sus cambios se interfieren. |
| Reutilización | No se puede llevar una parte sin arrastrar todo el archivo. |
| Legibilidad | Es 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 impresionJustificación: se separaron tres responsabilidades; el conteo baja del umbral y cada módulo se prueba de forma aislada.
⚠️ Casos límite¶
Tablas de datos: un arreglo
static constde miles de entradas es legítimo; conviene moverlo a un archivo propio de datos.Generación automática: el código de un parser generado por herramienta se exceptúa, pero se aísla del código escrito a mano.
Archivos de prueba: pueden superar el límite si cada prueba es independiente y el archivo sigue siendo navegable.
Cómo detectarla¶
| Herramienta | Comando | Señal |
|---|---|---|
wc | wc -l *.c *.h | Archivos por encima de 500 líneas. |
gaff | gaff check archivo.c | Longitud máxima de archivo excedida. |
| Revisión manual | — | Varios TAD o niveles de abstracción en un mismo archivo. |
Checklist de autocontrol¶
¿El archivo tiene una única responsabilidad?
¿Supera las 500 líneas?
¿Puedo separarlo en módulos con cabeceras propias?
¿Aislé las tablas y el código generado?
Reglas relacionadas¶
0x2014h: Cada función debe caber en una sola idea y en 25 líneas — funciones de una sola idea y hasta 25 líneas.
0x2005h: Cada función debe tener una única responsabilidad (Principio de Responsabilidad Única) — responsabilidad única por función.
0x301Dh: Diseñá los Tipos de Datos Abstractos utilizando punteros opacos — TAD con punteros opacos y cabeceras mínimas.
0x5005h: Organizá la estructura de tus archivos .c de forma estándar — estructura estándar de los archivos
.c.0x0105h: Los nombres de funciones deben usar snake_case estricto en minúsculas — separar módulos también separa funciones.