Regla 0x0006h: Las líneas de código no deben exceder los 79 caracteres
Sintaxis y formato visual (0x00XX)
0x0006h: Las líneas de código no deben exceder los 79 caracteres¶
Enunciado normativo¶
NO DEBE escribirse ninguna línea de código que supere los 79 caracteres (columna 80). Las líneas largas deben partirse en continuaciones explícitas.
El límite se cuenta incluyendo la indentación.
¿Por qué existe esta regla?¶
El problema¶
Toda línea que no entra en la pantalla obliga a desplazarse horizontalmente, y con el desplazamiento se pierde la referencia de la columna cero, que es justamente la que muestra el nivel de anidación. Leer código es comparar columnas: si la línea se corta, la comparación se rompe.
El límite de 80 columnas proviene de los terminales y se consolidó como
estándar de facto en proyectos como el kernel de Linux. Además, las guías de
estilo y los diff lado a lado asumen ese ancho.
Consecuencias de violarla¶
| Tipo de consecuencia | Efecto concreto |
|---|---|
| Compilación | Ninguna: el compilador acepta líneas de miles de caracteres. |
| Portabilidad | El estándar garantiza soporte hasta 4095 caracteres por línea lógica (§5.2.4.1). |
| Legibilidad | Desplazamiento horizontal y pérdida de las columnas de anidación. |
| Revisión | Los diff y las revisiones en paralelo se vuelven ilegibles. |
| Impresión | El código sale cortado o con fuentes diminutas. |
Fundamento en el estándar y en la cátedra¶
El estándar C11 impone un mínimo de 4095 caracteres por línea lógica (§5.2.4.1), muy por encima de 79; el límite es una convención de estilo, no una obligación del lenguaje. La cátedra lo adopta para que el código quepa en terminales estándar y para forzar la descomposición de expresiones complejas.
Alcance y excepciones¶
Aplica a todo el texto fuente: código, comentarios e incluso las líneas de preprocesador (salvo una única macro inevitable). Las cadenas literales largas se parten con concatenación implícita; las URLs dentro de comentarios también deben partirse.
Ejemplos exhaustivos¶
❌ Contraejemplo 1 — Cadena larguísima¶
printf("Este es un mensaje de texto extremadamente largo que supera los ochenta caracteres en una sola línea.\n");Por qué falla: la instrucción ocupa más de 100 columnas y el final se pierde
fuera de la pantalla, ocultando el \n y el cierre de la llamada.
❌ Contraejemplo 2 — Condición anidada sin cortes¶
if (usuario_activo && tiene_permisos && saldo_disponible >= monto_solicitado && !modo_mantenimiento)
{
aprobar();
}Por qué falla: la condición entera no entra en pantalla y, peor, mezcla operadores lógicos sin paréntesis aclaratorios (0x1013h: Detector de expresiones booleanas complejas sin paréntesis aclaratorios).
✅ Ejemplo conforme 1 — Cadena partida¶
printf("Mensaje largo dividido "
"en dos líneas continuas.\n");Justificación: la concatenación implícita de literales adyacentes mantiene el texto original y cada línea entra en 79 columnas.
✅ Ejemplo conforme 2 — Condición descompuesta¶
bool puede_aprobar = usuario_activo
&& tiene_permisos
&& saldo_disponible >= monto_solicitado
&& !modo_mantenimiento;
if (puede_aprobar)
{
aprobar();
}Justificación: cada término vive en su línea, alineado bajo el primero, y el
nombre puede_aprobar documenta la condición compuesta.
⚠️ Casos límite¶
Un carácter = un byte ASCII: los caracteres UTF-8 cuentan varios bytes; la regla mide caracteres visibles, no bytes.
Cadenas no partibles: si un literal no se puede partir sin alterar el significado, se usan macros o se documenta la excepción.
Código generado: puede exceder el límite si está marcado como tal.
Cómo detectarla¶
| Herramienta | Comando | Señal |
|---|---|---|
gaff | gaff check archivo.c | Línea con más de 79 caracteres. |
awk | awk 'length > 79 {print FNR": "length}' archivo.c | Número de línea y longitud excedida. |
| Editor | Regla en columna 80 | Indicador visual del límite. |
Checklist de autocontrol¶
¿Ninguna línea supera la columna 79?
¿Partí las cadenas con concatenación implícita?
¿Descompuse las condiciones largas en variables locales?
¿La continuación respeta la indentación de 0x0004h: Cada bloque debe tener una indentación de cuatro espacios respecto a su contenedor y llaves?
Reglas relacionadas¶
0x0004h: Cada bloque debe tener una indentación de cuatro espacios respecto a su contenedor y llaves — la indentación consume ancho y debe seguir siendo clara.
0x0003h: Un espacio antes y después de cada operador binario — el espaciado uniforme evita líneas innecesariamente largas.
0x0201h: Escribí comentarios que expliquen el ‘porqué’, no el ‘qué’ — los comentarios también respetan el límite de columnas.
0x1013h: Detector de expresiones booleanas complejas sin paréntesis aclaratorios — paréntesis aclaratorios en condiciones compuestas.
0x1004h: Las condiciones complejas deben simplificarse o comentarse — simplificar condiciones complejas con auxiliares.