El compilador Small Device C (SDCC) lanzó la versión 4.6.0 el 22 de junio de 2026, continuando una línea de desarrollo que comenzó en 1999. SDCC es una suite de compilación retargetable y optimizante que implementa los estándares ANSI C89, ISO C99, ISO C11 y el emergente ISO C23. A diferencia de los compiladores convencionales que se centran en procesadores de 32 y 64 bits, SDCC está dirigido a microcontroladores de 8 bits—arquitecturas todavía ampliamente utilizadas en control embebido, electrónica de consumo y equipos industriales legados.

Small Device C Compiler project banner image from its GitHub repository
SDCC project repository on GitHubgithub.com

This image is from the official SDCC GitHub repository (swegener/sdcc) and provides visual context for the open-source compiler project discussed throughout the article. SDCC is an open-source, retargetable optimizing C compiler for 8-bit microcontrollers that has been in development since 1999.

### Arquitecturas soportadas y estado actual

Los principales targets de SDCC incluyen la familia Intel MCS‑51 (8031, 8032, 8051, 8052), Maxim (anteriormente Dallas) DS80C390, Freescale/Motorola HC08 y S08, variantes Zilog Z80 (Z80, Z180, eZ80, Rabbit 2000/3000/4000, SM83, TLCS‑90, R800), Padauk (pdk14, pdk15), STMicroelectronics STM8, y el MOS 6502 y WDC 65C02. Hay trabajo en curso que cubre Rabbit 5000/6000, Padauk pdk13, y los targets f8/f8l. Los puertos PIC16 y PIC18 están listados como no mantenidos. El compilador funciona en Linux (amd64, x86, aarch64, ppc64), macOS (amd64), y Windows (a través de MinGW cross-compilación), con FreeBSD aarch64 también probado.

### Novedades en la versión 4.6.0

La versión 4.6.0 agrega una extensa lista de características de C23 y C2y: el operador `_Countof`, literales octales, if-declarations, operadores condicionales con segundos operandos omitidos, literales compuestos con especificadores de clase de almacenamiento, tipos enteros de precisión de bits firmados (`_BitInt`), utilidades de bits, `umaxabs`, `uabs`/`ulabs`/`ullabs`, `constexpr` (principalmente), la macro `containerof`, el calificador `_Optional`, y funciones variádicas de C23 con `va_start`. Los cambios a nivel de lenguaje incluyen hacer que los bit-fields `int` plain sean firmados, adoptar la semántica de C99 para `realloc(ptr, 0)`, y emitir advertencias en accesos a parámetros de arreglo que excedan los límites declarados. El lanzamiento también introduce un puerto f8l experimental, un nuevo puerto r4k para el Rabbit 4000, y puertos experimentales r5k/r6k para Rabbit 5000/6000, además de soporte `__far` en los puertos Rabbit para un espacio de direcciones de datos de 1 MB. La generación de código para puertos relacionados con Z80 ha sido "sustancialmente mejorada", y el puerto ez80 reemplaza la antigua variante ez80_z80.

### Modelo de financiamiento y desarrollo

SDCC ha sido desarrollado históricamente por voluntarios no remunerados, con ocasional apoyo de empleados universitarios autorizados a contribuir durante su tiempo pagado y muestras de hardware de proveedores de MCU. En octubre de 2025 el proyecto anunció dos premios de financiamiento. El fondo NGI0 Commons apoya mejoras específicas de hardware para los targets Padauk, Rabbit, y Toshiba TLCS, además de trabajo independiente de máquina sobre estándares ISO C recientes, una optimización de uso de memoria de variables locales, y optimización en tiempo de enlace para eliminar funciones no utilizadas—esta última una solicitud pendiente desde hace tiempo de los usuarios. El Fondo de Tecnología Soberana encargó trabajo sobre seguridad y protección para firmware embebido: características modernas de C relevantes para codificación segura, preparación para criptografía post-cuántica, mitigaciones de ataques laterales, y pruebas extendidas de combinaciones menos comunes de línea de comandos. Ambos proyectos involucran al equipo de desarrollo existente.

### Contexto comunitario y alternativas

Los usuarios veteranos recuerdan SDCC como una alternativa pivotal al compilador comercial Hi‑Tech C para desarrollo PIC16 en los primeros años 2000. El puerto 8051 es frecuentemente citado como la opción de código abierto más capaz para esa arquitectura, aunque algunos desarrolladores notan persistentes bugs. El puerto MOS 6502 se originó como una modificación del backend HC08 y fue posteriormente limpiado y fusionado por Gabriele Gorla; hoy, herramientas alternativas 6502 como llvm‑mos y Oscar64 ofrecen diferentes perfiles de optimización. Solicitudes de soporte para PIC10/PIC12 permanecen abiertas. La suite de componentes del compilador incluye un ensamblador/enlazador retargetable (sdas/sdld, derivado de ASXXXX), un preprocesador (sdcpp, de GCC cpp), simuladores (ucsim), un depurador de nivel de fuente (sdcdb), y utilidades derivadas de binutils—todos bajo licencias GPL o compatibles.

### Lo que sigue siendo incierto

El proyecto no publica una hoja de ruta formal con fechas, así que el cronograma para completar los puertos Rabbit 5000/6000, Padauk pdk13, y f8/f8l es incierto. Los puertos PIC16/PIC18 están marcados como no mantenidos, pero no hay un plan declarado para su eliminación o reactivación. La optimización en tiempo de enlace, si bien financiada, aún no ha aparecido en una versión lanzada. Los usuarios evaluando SDCC contra compiladores propietarios deberían verificar el actual estado de calidad del código y bugs para su target específico, ya que las fuentes provistas no brindan benchmarks comparativos.