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 0x500Eh: Prohibición de la biblioteca obsoleta y no estándar <conio.h> (getch, clrscr)

Compilacion, preprocesador y seguridad (0x50XX)

Universidad Nacional de Río Negro

0x500Eh: Prohibición de la biblioteca obsoleta y no estándar <conio.h> (getch, clrscr)

Enunciado normativo

NO DEBE incluirse <conio.h> ni usarse sus funciones (getch, clrscr, textcolor, gotoxy, ...). La entrada y la salida se resuelven con la biblioteca estándar (<stdio.h>).

¿Por qué existe esta regla?

El problema

<conio.h> es una cabecera propietaria de compiladores antiguos de DOS y de algunos entornos Windows (Turbo C, Borland, MSVC). No pertenece a ISO C ni a POSIX: en Linux con GCC no existe y cualquier #include <conio.h> detiene la compilación con «No such file or directory». Sus funciones tampoco son portables: getch lee una tecla sin eco con comportamiento no especificado y clrscr escribe directo en memoria de video. Un programa así no se puede probar ni ejecutar en el sandbox de corrección.

Consecuencias de violarla

Tipo de consecuenciaEfecto concreto
Compilaciónfatal error: conio.h: No such file or directory en GCC/Linux.
PortabilidadSólo compila en DOS o Windows; no corre en la cátedra.
TestabilidadLa lectura de teclas sin eco no se puede simular desde un archivo.

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

ISO/IEC 9899:2011 no define ninguna función de conio; la entrada/salida de caracteres y la lectura de líneas están en <stdio.h> (§7.21). La cátedra exige código compilable con gcc -std=c11 -pedantic en Linux, lo que excluye toda cabecera no estándar.

Alcance y excepciones

Aplica a todo el código de la materia. No hay excepción: si se necesita control de terminal (colores, limpiar pantalla), se usa la biblioteca estándar con secuencias de escape ANSI, que es texto y por lo tanto testeable. Si se requiere detección de teclas sin Enter, eso excede el alcance de la materia y se consulta con la cátedra antes de usar bibliotecas de terceros.

Ejemplos exhaustivos

❌ Contraejemplo 1 — conio.h para pausar o limpiar

#include <conio.h>

int main(void)
{
    clrscr();
    printf("Hola");
    getch();
    return 0;
}

Por qué falla: ni <conio.h> ni clrscr ni getch existen en la biblioteca estándar; el programa no compila en la máquina de la cátedra.

❌ Contraejemplo 2 — Colores y posición con API propietaria

#include <conio.h>

void dibujar(void)
{
    textcolor(4);
    gotoxy(10, 5);
    cprintf("Hola");
}

Por qué falla: textcolor, gotoxy y cprintf son extensiones del entorno DOS. Su semántica depende de la memoria de video y no tienen equivalente portable; además el código deja de poder redirigirse a un archivo.

✅ Ejemplo conforme 1 — Pausa y limpieza con E/S estándar

#include <stdio.h>

int main(void)
{
    printf("\033[2J\033[H");
    printf("Hola\n");
    getchar();
    return 0;
}

getchar es la lectura estándar de un carácter (requiere Enter) y \033[2J es la secuencia ANSI de limpieza, que es texto normal y puede redirigirse o testearse alimentando la entrada estándar.

✅ Ejemplo conforme 2 — Entrada interactiva con fgets

#include <stdio.h>

int main(void)
{
    char linea[32];

    printf("Presione Enter para continuar...");
    if (fgets(linea, sizeof(linea), stdin) == NULL) {
        return 1;
    }
    return 0;
}

La pausa se implementa leyendo una línea con fgets, portable y verificable; el retorno se controla como exige 0x5006h: Preferí fgets sobre gets y scanf para leer cadenas. Reemplaza directamente a getch.

⚠️ Casos límite

Cómo detectarla

HerramientaComandoSeñal
gaffgaff check archivo.cReporta 0x500Eh ante #include <conio.h> o funciones de esa API.
gcc / clanggcc -std=c11 -Wall -Wextra -Werror -pedantic archivo.cfatal error: conio.h: No such file or directory.

Checklist de autocontrol

Reglas relacionadas