- 1 1. Por qué importa la «versión del lenguaje C»
- 2 2. Estructura básica de las versiones del lenguaje C y la relación entre estándares y compiladores
- 3 3. Lista y evolución de versiones del lenguaje C
- 4 4. Cómo elegir cada versión y consejos prácticos
- 5 5. Tendencias futuras y más allá de C23
- 6 6. Resumen
- 7 7. FAQ (Preguntas frecuentes)
- 7.1 Q1. ¿La versión del compilador es la misma que la versión del estándar del lenguaje C?
- 7.2 Q2. ¿Todavía tiene valor aprender estándares antiguos (C90 o C95)?
- 7.3 Q3. ¿Debería empezar a usar el estándar C23 más reciente de inmediato?
- 7.4 Q4. ¿Puedo determinar a qué estándar se ajusta mi entorno a partir del valor de __STDC_VERSION__?
- 7.5 Q5. ¿Qué estándares son compatibles con Visual Studio y GCC?
- 7.6 Q6. ¿Cuáles son las diferencias entre las versiones de C++ y del lenguaje C?
- 7.7 Q7. No estoy seguro de qué versión aprender. ¿Qué recomiendas?
1. Por qué importa la «versión del lenguaje C»
El lenguaje C ha sido ampliamente utilizado como base para lenguajes de programación desde su nacimiento en la década de 1970. A lo largo de su larga historia, se han definido varias versiones (estándares) y ha continuado evolucionando.
Pero, ¿qué significa realmente una «versión» del lenguaje C? ¿Y por qué necesitas estar al tanto de la versión?
El C ha sido utilizado durante mucho tiempo para desarrollar muchos sistemas y aplicaciones, por lo que preguntas como «¿para qué versión se escribió el código?» y «¿a qué versión se ajusta el compilador?» tienen un impacto importante en lacompatibilidad del código, laportabilidad e incluso lamantenibilidad.
En la práctica, los estándares (versiones) del lenguaje C han agregado nuevas características y especificaciones y han revisado o deprecado las más antiguas con el tiempo.
Por ejemplo, los «arreglos de longitud variable», el «tipo bool» y el «soporte estandarizado para hilos» no existían en versiones antiguas y solo están disponibles en versiones suficientemente recientes.
Por el contrario, compilar código fuente escrito para un estándar antiguo con un compilador dirigido a un estándar más nuevo puede producir errores o advertencias inesperados.
En este artículo, discutiremos las versiones del lenguaje C desde la perspectiva de«por qué importan»,
Diferencias entre versiones
Características clave
Cómo elegir en la práctica
Y las tendencias más recientes
Explicaremos estos puntos claramente. Ya sea que estés comenzando a aprender C o seas un ingeniero que lo usa en el campo, esto busca proporcionar información útil para cualquiera que desee organizar su conocimiento básico sobre las versiones de C.
2. Estructura básica de las versiones del lenguaje C y la relación entre estándares y compiladores
Cuando escuchas el término “versión” del lenguaje C, los principiantes en programación podrían confundirse un poco.
Porque “versión” en realidad tiene dos significados.
Uno es laversión de la especificación (estándar) del lenguaje C. El otro es laversión del software del compilador del lenguaje C.
¿Qué es una versión de estándar (especificación) del lenguaje C?
El estándar del lenguaje C ha sido establecido por organizaciones como la Organización Internacional de Normalización (ISO) y el Instituto Nacional de Estándares de Estados Unidos (ANSI).
Cada estándar se identifica con nombres de versión como “C89”, “C99”, “C11”, “C17” y “C23”.
Estas versiones definen lasreglas de los programas en lenguaje C, como “qué sintaxis está permitida”, “qué características están disponibles” y “cómo se comportan”.
¿Qué es una versión de compilador?
Por otro lado, el “compilador” que usas para escribir programas en C (como GCC, Clang, Visual Studio, etc.) también tiene su propia versión de software.
Un compilador determina qué estándar del lenguaje C soporta, y los compiladores más nuevos soportan estándares más nuevos.
Por ejemplo, GCC soporta C99, C11, C17, etc., dependiendo de su versión, y Visual Studio ha soportado muchas características de C11 desde la versión 2019.
Entendiendo la diferencia entre estándares y compiladores
- versión de estándar del lenguaje C = libro de reglas del lenguaje
- versión de compilador = hasta qué punto sigue el libro de reglas, la evolución del software que proporciona las características
Estos dos están estrechamente relacionados pero no son lo mismo.
Por ejemplo, incluso un compilador más nuevo puede incluir características no estándar o extensiones propietarias.
Al desarrollar en C, estar consciente de “a qué estándar se ajusta el código” y “hasta qué punto el compilador que estás usando lo soporta” lleva aevitar problemas y asegurar la portabilidad.
3. Lista y evolución de versiones del lenguaje C
Desde su creación, el lenguaje C ha pasado por numerosas revisiones de estándares. Cada versión introduce adiciones de características distintivas y cambios en las especificaciones. Aquí, explicamos las versiones principales en orden cronológico.
3.1 C89/C90 (ANSI C / ISO C)
El primer lenguaje C estandarizado es “C89 (ANSI X3.159-1989)”. Fue definido por el American National Standards Institute (ANSI) y más tarde publicado por la International Organization for Standardization (ISO) como “C90 (ISO/IEC 9899:1990)” con esencialmente el mismo contenido.Características:
- La biblioteca estándar y las especificaciones del lenguaje se aclararon, mejorando en gran medida la portabilidad de los programas en C.
- La sintaxis de declaración de funciones, la verificación de tipos y otros aspectos se endurecieron en comparación con el “K&R C” anterior.
- Muchas construcciones sintácticas fundamentales y funciones estándar se organizaron en este punto.
Además, en 1995 se añadió una revisión llamada “C95 (ISO/IEC 9899/AMD1:1995)”. C95 es una pequeña actualización dirigida al soporte de caracteres amplios, internacionalización y varias correcciones de errores.
3.2 C99 (ISO/IEC 9899:1999)
C99 es un estándar que modernizó significativamente el lenguaje C. Se añadieron muchas características para mejorar la comodidad del programador.Adiciones y cambios principales:
- Matrices de longitud variable (VLA)
- Comentarios de una línea usando
//
- Introducción del tipo estándar
bool
y del tipolong long int
- Funciones inline
inline
- Soporte para números complejos
- Sintaxis de inicializador flexible (p. ej., inicialización de arrays entre llaves)
3.3 C11 (ISO/IEC 9899:2011)
C11 es un estándar que fortalece el soporte para entornos de desarrollo modernos y procesamiento paralelo.Adiciones y cambios principales:
- Estandarización de hilos (multihilo) (
)
- Operaciones atómicas y modelo de memoria (mejorando la seguridad de la ejecución paralela)
- Adición de aserciones estáticas
_Static_assert
- Macro genérica
_Generic
- Mejora del control de alineación y soporte para Unicode
Sin embargo, algunos compiladores carecen de implementaciones para las características de hilos y otras funcionalidades, por lo que se requiere precaución al usarlas.
3.4 C17/C18 (ISO/IEC 9899:2018)
C17 (a veces referido como C18) consiste principalmente en correcciones de errores y ajustes menores de especificaciones a C11, sin características nuevas importantes.Características:
- Enfoque en correcciones de errores y aclaración de especificaciones ambiguas
- En la práctica, se usa de manera similar a C11
3.5 C23 (ISO/IEC 9899:2024)
C23, el estándar más reciente formalizado en 2024, incorpora muchas características nuevas en respuesta a tendencias recientes en otros lenguajes y demandas de la industria.Adiciones y cambios principales:
- Adición de la palabra clave
nullptr
(mejorando la compatibilidad con C++) - Introducción de literales binarios (p. ej.,
0b1010
) - Soporte para el tipo
char8_t
(tipo explícito UTF-8) - Adición y unificación de atributos estándar
- Funciones mejoradas de manipulación de bits
- Refinamientos sintácticos menores para una mejor legibilidad
Se espera que C23 se convierta en el estándar para el desarrollo futuro en C, pero se necesita atención respecto al soporte de compiladores.
Esto concluye la visión general de la evolución de las versiones principales del lenguaje C. El próximo capítulo discutirá cómo elegir y aplicar estas versiones en la práctica.
4. Cómo elegir cada versión y consejos prácticos
C tiene múltiples versiones estándar, pero al escribir código en la práctica, es importante ser consciente de qué versión se está utilizando. Aquí explicamos cómo elegir una versión en el campo, formas de evitar errores comunes y técnicas prácticas útiles en el trabajo real.
Directrices básicas para la selección de versión
1. Priorizar estándares más nuevos como regla general
Si es posible, se recomienda utilizar estándares más nuevos (C11, C17, C23). Los estándares más nuevos proporcionan correcciones de errores, mejoras de seguridad y mayor comodidad en la programación.
2. Alinear con el código y el entorno existentes
Sin embargo, en muchos casos se requiere adherirse a estándares más antiguos (C90/C99) para sistemas existentes, bibliotecas o desarrollo embebido. En contextos embebidos, el soporte del compilador también puede imponer restricciones.
Cómo verificar la conformidad con el estándar
En C, puedes usar la macro del preprocesador __STDC_VERSION
para determinar fácilmente qué estándar soporta el compilador.
#include
int main(void) {
#if __STDC_VERSION__ >= 202311L
printf("Soporte para C23 (ISO/IEC 9899:2024)n");
#elif __STDC_VERSION__ >= 201710L
printf("Soporte para C17/C18n");
#elif __STDC_VERSION__ >= 201112L
printf("Soporte para C11n");
#elif __STDC_VERSION__ >= 199901L
printf("Soporte para C99n");
#elif __STDC_VERSION__ >= 199409L
printf("Soporte para C95n");
#else
printf("Soporte para C89/C90n");
#endif
return 0;
}
De esta manera, puedes usar la __STDC_VERSION__
macro para verificar la versión del estándar en cada entorno.

Consideraciones prácticas comunes
- Verificar el soporte del compilador
No todos los compiladores admiten completamente los estándares más recientes. Por ejemplo, GCC y Clang adoptan estándares más nuevos rápidamente, mientras que Visual Studio y compiladores embebidos pueden tener un retraso en el soporte. - A veces es necesario especificar opciones
Algunos compiladores requieren una versión explícita del estándar a través de opciones de línea de comandos para habilitar nuevas funciones. Ejemplo:gcc -std=c11 sample.c
- Considerar la portabilidad y el mantenimiento
En proyectos a gran escala o a largo plazo, es posible que elijas deliberadamente un estándar ligeramente más antiguo para priorizar el mantenimiento y la portabilidad.
Guía práctica para la selección de versión
- Proyectos nuevos o aprendizaje: se recomienda C11 o C17
- Soporte para sistemas embebidos o legacy: C99 o C90 también son opciones
- Si quieres usar activamente las funciones más recientes: investiga el soporte para C23 antes de decidir
- Desarrollo con múltiples personas/entornos: comparte el estado de soporte de cada compilador con antelación
Al ser consciente de las versiones del estándar C y elegir apropiadamente, puedes prevenir errores y problemas de incompatibilidad antes de que surjan. Elige la versión óptima basada en las realidades de tu entorno y objetivos del proyecto.
5. Tendencias futuras y más allá de C23
El lenguaje C ha continuado evolucionando con los tiempos. En 2024, C23 fue finalmente aprobado como un estándar internacional. Este artículo explica los puntos clave de C23 y las perspectivas para futuros estándares del lenguaje C.
Formalización de C23 y nuevas características principales
C23 (ISO/IEC 9899:2024) incorpora muchas adiciones y mejoras para satisfacer las necesidades modernas. Las nuevas características y mejoras notables son las siguientes.
- Adición de la palabra clave nullptr – Al igual que en C++,
nullptr
ahora puede usarse como un valor de puntero nulo explícito. Esto mejora la legibilidad y ayuda a prevenir errores. - Introducción de literales binarios – Anteriormente, C no podía representar números binarios directamente, pero a partir de C23, se permiten literales binarios como
0b1010
. - Adición del tipo char8_t – Se ha agregado el tipo de carácter específico de UTF‐8
char8_t
, haciendo que el manejo de caracteres multibyte sea más intuitivo. - Atributos estándar mejorados y funciones de operaciones con bits – Se han introducido nuevos atributos dirigidos a la legibilidad y optimización, así como funciones estándar expandidas para la manipulación de bits.
- Mejoras en la sintaxis y características a nivel detallado – Se han realizado numerosas refinaciones en el manejo de errores, la seguridad y el soporte para estilos de programación modernos.
Estado de adopción de C23 y adopción futura
Dado que la especificación de C23 se lanzó solo en 2024, aún no está disponible en todos los compiladores y entornos de desarrollo. Compiladores de código abierto como GCC y Clang están agregando gradualmente soporte para C23, pero la implementación completa y la adopción generalizada aún tomarán tiempo.
En la práctica, se espera que C11 y C17 sigan siendo los estándares dominantes en el futuro previsible. Sin embargo, a medida que los compiladores principales agreguen soporte en los próximos años, se espera que los estilos de desarrollo modernos que aprovechen las características de C23 se vuelvan más comunes.
Perspectivas futuras para el lenguaje C
El lenguaje C ya tiene una especificación altamente estable, tanto que a veces se le llama un lenguaje “maduro”, pero se espera que continúe evolucionando de manera incremental incorporando retroalimentación de los usuarios y tendencias de otros lenguajes. La demanda en áreas como AI, IoT y desarrollo embebido sigue siendo fuerte, por lo que mantener un ojo en las nuevas versiones del lenguaje C continuará siendo importante.
Además, es probable que haya revisiones regulares del estándar en el futuro, y mantenerse informado sobre los últimos desarrollos puede proporcionar una ventaja competitiva y ayudar a evitar problemas en el campo.
6. Resumen
C, incluso casi medio siglo después de su creación, aún se utiliza en muchos sistemas y entornos de desarrollo de software. Esto está respaldado por las numerosas revisiones estándar y la evolución acumulada como “versiones del lenguaje C”.
En este artículo, hemos proporcionado una visión general amplia de las características y la evolución de cada versión del lenguaje C, así como cómo elegir y consideraciones en la práctica, hasta las tendencias del estándar más reciente C23.
Beneficios de Conocer las Versiones
- Mantenibilidad mejorada: Identificar claramente en qué estándar se basa un proyecto facilita el mantenimiento futuro y el manejo de cambios en las especificaciones.
- Portabilidad asegurada: Reutilizar y compartir código fuente en diferentes entornos de desarrollo y compiladores se vuelve más fácil.
- Prevención de problemas: Ya sea ejecutando código antiguo en un entorno nuevo o usando nuevas características, entender las diferencias de versión con antelación ayuda a evitar errores inesperados y problemas de incompatibilidad.
Elegir una Versión para Uso Práctico
Para principiantes, es realista comenzar con C99 o C11, que tienen un conjunto completo de características estándar y abundante material de referencia.
En el desarrollo de producción, elija la versión óptima considerando el compilador que usa y las restricciones de los sistemas existentes.
Considerando Actualizaciones a C Moderno
Los estándares más recientes como C23 pueden tardar en adoptarse en el campo, pero contribuyen a mejoras en la eficiencia y seguridad de la programación futura.
De ahora en adelante, es importante estar atento a la evolución de las versiones del lenguaje C y continuar actualizando sus conocimientos y habilidades según sea necesario.
Comprender correctamente las “versiones del lenguaje C” y tomar decisiones y despliegues apropiados a la situación lleva a un desarrollo más seguro y eficiente.
Esperamos que este artículo sirva como una pista útil para su trabajo y aprendizaje.
7. FAQ (Preguntas frecuentes)
Aquí compilamos las preguntas y respuestas más comunes sobre “versiones del lenguaje C”. El contenido está cuidadosamente seleccionado para ayudar a todos, desde principiantes hasta ingenieros en práctica, a resolver sus dudas.
Q1. ¿La versión del compilador es la misma que la versión del estándar del lenguaje C?
A.No, son diferentes.
La versión del estándar del lenguaje C se refiere a la especificación en sí, como C99, C11, C23, etc. En contraste, la versión del compilador indica cómo ha evolucionado el software.
Por ejemplo, incluso las versiones más recientes de GCC o Clang no operarán automáticamente en modo conforme al estándar a menos que especifiques explícitamente algo como “-std=c11”, así que tenlo en cuenta.
Q2. ¿Todavía tiene valor aprender estándares antiguos (C90 o C95)?
A.Sí, lo tiene.
Incluso hoy en día, muchas empresas y entornos de desarrollo embebido priorizan la compatibilidad y los activos heredados, y desarrollan según los estándares C90 o C95. Conocer los estándares pasados siempre es útil para la resolución de problemas y el mantenimiento.
Q3. ¿Debería empezar a usar el estándar C23 más reciente de inmediato?
A.Se requiere una evaluación cuidadosa.
C23 solo fue ratificado oficialmente en 2024, y no todos los compiladores o entornos de desarrollo lo soportan completamente aún. Puede valer la pena experimentarlo en proyectos nuevos o aprendizaje personal, pero en producción siempre debes verificar el soporte del compilador y el entorno de desarrollo general de tu equipo.
Q4. ¿Puedo determinar a qué estándar se ajusta mi entorno a partir del valor de __STDC_VERSION__
?
A.Sí, puedes.
__STDC_VERSION__
es una macro que indica la versión del estándar del lenguaje C soportado por el compilador.
Los valores típicos son los siguientes:
Valor de macro | Nombre del estándar |
---|---|
199409L | C95 |
199901L | C99 |
201112L | C11 |
201710L | C17/C18 |
202311L | C23 |
Q5. ¿Qué estándares son compatibles con Visual Studio y GCC?
A.El soporte varía según el compilador.
Por ejemplo, GCC y Clang adoptan estándares más nuevos (C11, C17, C23) relativamente rápido, mientras que Visual Studio solo implementa un subconjunto de características a partir de C11. Los compiladores embebidos muestran aún más variación, por lo que se recomienda consultar la documentación oficial para obtener la información más reciente.
Q6. ¿Cuáles son las diferencias entre las versiones de C++ y del lenguaje C?
A.C++ es un lenguaje separado que evolucionó de C, y sus políticas de versión y adición de características son diferentes.
Los estándares de C++ (C++98, C++11, C++17, etc.) han evolucionado junto con los estándares de C, pero hay áreas donde la compatibilidad no es completa, por lo que tratarlos de la misma manera puede ser riesgoso.
Q7. No estoy seguro de qué versión aprender. ¿Qué recomiendas?
A.A menos que tengas una razón específica, se recomienda comenzar con C99 o C11.
Tienen recursos abundantes y se usan ampliamente en el campo, lo que hace que el aprendizaje sea eficiente. Si te adentras en dominios embebidos o especializados, elige la versión que coincida con tu lugar de trabajo o entorno de desarrollo.
Esperamos que esta FAQ ayude a resolver tus preguntas y te asista en tu trabajo.
Profundiza tu comprensión de las versiones del lenguaje C para habilitar una programación más segura y eficiente.