Durante mucho tiempo se derivaron diversas versiones sobre este lenguaje de programación lo que generó incompatibilidades. Para solucionar esto, en 1989 nace ANSI C, el cual fue un estándar definido por ANSI para el lenguaje C. Este es la versión de C más utilizada. Sin embargo, actualmente existe otra nueva conocida como C99, que fue la versión que ANSI aprobó desde 1999.
Se puede decir que C es un lenguaje de programación de propósito general, y cuenta con ciertas características especificas como es la programación estructurada, economía de las expresiones, abundancia en operadores y tipos de datos, codificación de alto y bajo nivel simultáneamente, reemplaza ventajosamente la programación en ensamblador, utilización natural de las funciones primitivas del sistema, no está orientado a ninguna área en especial, producción de código objeto altamente optimizado.
Una de las ventajas mas valiosas en C es la disposición de características de lenguajes de bajo y alto nivel. Por tanto es catalogado como un lenguaje débilmente tipado de medio nivel pero con muchas características de bajo nivel. Dispone de las estructuras típicas de los lenguajes de alto nivel pero, a su vez, dispone de construcciones del lenguaje que permiten un control a muy bajo nivel. Los compiladores suelen ofrecer extensiones al lenguaje que posibilitan mezclar código en ensamblador con código C o acceder directamente a memoria o dispositivos periféricos. Lo que lo hace ideal para desarrollar programas que requieran de alto desempeño y optimización.
Imporatante conocer que la extensión ".c". De manera que pueden ser escritos en cualquier editor de texto. El proceso de compilación cuenta con tres fases: el preprocesado, la compilación, y el enlazamiento. El preprocesado realiza algunas acciones que deben hacerse antes de compilar, por ejemplo, el cambio de nombres de constantes por su valor real, entre otras. El compilado se encarga de convertir el programa en lenguaje C, a lenguaje máquina, generándose un programa en código objeto con extensión ".obj". El enlazamiento se encarga de agregar al programa objeto, todas aquellas funciones o módulos que forman parte del programa pero que se encuentran en archivos separados, para finalmente generar un programa ejecutable con extensión ".exe".