En la conferencia Kernel Recipes en septiembre de 2026, Martin Uecker, profesor de ingeniería biomédica que desarrolla software para escáneres de resonancia magnética, presentó una charla sobre el esfuerzo en curso para reducir el comportamiento indefinido en el lenguaje C. Reconoció la antigüedad de C pero sostuvo que sigue siendo un lenguaje valioso porque es portátil entre plataformas, estable durante décadas, compila rápidamente y genera código de máquina que sigue de cerca la intención del programador — un principio a menudo resumido como 'lo que ves es lo que obtienes'.

Esta imagen muestra al orador mencionado en el primer párrafo del artículo, Martin Uecker, quien dio la charla en Kernel Recipes 2026 sobre la reducción del comportamiento indefinido en C.
Uecker explicó que el comportamiento indefinido surge cuando un programa realiza una operación no definida por el estándar C, como leer una variable no inicializada, dividir por cero o acceder a bytes de relleno en una estructura. En esos casos, el estándar no impone requisitos al compilador, que puede producir cualquier resultado, incluidos resultados erróneos a veces descritos coloquialmente como invocar 'demonios nasales'. Ilustró esto con ejemplos: un compilador podría eliminar una prueba de división por cero y simplemente almacenar una constante, o reordenar una división antes de un almacenamiento en una variable volátil, cambiando el comportamiento del programa cuando el divisor es cero.
Para abordar estos problemas, el comité de estándares de C mantiene tres grupos de estudio enfocados en el modelo de objeto de memoria, la seguridad de memoria y el comportamiento indefinido. Su trabajo ya ha eliminado 45 instancias de comportamiento indefinido de las aproximadamente 100 presentes en el estándar actual, como se refleja en el borrador en progreso de C2y. Las mejoras recientes incluyen tipos de enteros de precisión bit a bit, operaciones de enteros verificadas, rangos de caso, bucles for nombrados y la macro _Countof() para determinar la longitud de los arreglos. Sin embargo, lograr una seguridad de memoria completa en C sigue siendo un desafío; Uecker descompuso el problema en seguridad de tipos, seguridad de memoria espacial (parcialmente ayudada por la comprobación de límites y el atributo counted_by) y seguridad de memoria temporal (donde los errores de uso después de liberar son difíciles de eliminar sin comprobación en tiempo de ejecución costosa o verificación formal). Sugirió que el enfoque más práctico a corto plazo combina un subconjunto restringido del lenguaje con herramientas de verificación formal.