Menu

¿Qué es C? El lenguaje de programación que hay detrás de todo lo demás

C es un lenguaje compilado, pequeño y rápido de 1972 que todavía hace funcionar sistemas operativos, bases de datos y casi todos los dispositivos embebidos. Aquí está qué es, dónde se ejecuta y por qué vale la pena aprenderlo en 2026.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

C es un lenguaje de programación compilado y de propósito general creado por Dennis Ritchie en los Laboratorios Bell en 1972 para escribir el sistema operativo Unix. Ha sobrevivido a casi todo lo de su época, y la razón es simple: C se sitúa una capa fina por encima de la máquina. Te da acceso directo a la memoria y a las capacidades reales de la CPU, y aun así se lee como algo que escribió una persona.

Medio siglo después sigue siendo el lenguaje en el que se construyen los demás lenguajes.

Un programa completo en C

Aquí está la forma del lenguaje entero en seis líneas. Pulsa Ejecutar.

#include <stdio.h> trae las declaraciones estándar de entrada y salida para que printf sea conocida. main es donde empieza todo programa de C. printf escribe texto, \n es un salto de línea y return 0 le dice al sistema operativo que el programa terminó con éxito. Ese es un programa completo y compilable: no hay ninguna clase que lo envuelva ni ningún framework por debajo.

Qué hace distinto a C

La mayoría de los lenguajes modernos te esconden la máquina. C deliberadamente no lo hace.

  • Se compila a código nativo. Un programa de C se convierte en instrucciones de máquina para una CPU y se ejecuta directamente, sin intérprete ni máquina virtual de por medio.
  • Tú gestionas la memoria. No hay recolector de basura. Pides memoria y la devuelves. Eso es más trabajo, y también es por lo que los programas de C usan tan poca memoria y tienen tiempos tan predecibles.
  • Es pequeño. C tiene unas 32 palabras clave. Puedes tener el lenguaje entero en la cabeza, cosa que no es cierta de C++, Java o Python.
  • Casi no tiene entorno de ejecución. Un programa de C puede correr en un microcontrolador con unos pocos kilobytes de RAM y sin ningún sistema operativo.

El intercambio es honestidad por seguridad. C te dejará leer más allá del final de un array o usar memoria que ya liberaste, y no te detendrá. Esos errores tienen nombre —fallos de segmentación, fugas de memoria, comportamiento indefinido— y aprender C es en buena medida aprender a evitarlos.

Dónde se ejecuta C de verdad

C no es una curiosidad histórica. Se está ejecutando en el dispositivo con el que lees esto, varias veces.

  • Sistemas operativos. El núcleo de Linux son aproximadamente 30 millones de líneas de C. Grandes partes de Windows y del núcleo de Apple también son C.
  • Sistemas embebidos. Los microcontroladores de coches, termostatos, dispositivos médicos, enrutadores y lavadoras se programan mayoritariamente en C. Cuando el chip entero tiene 32 KB de memoria, C suele ser la única opción realista.
  • Bases de datos. SQLite, PostgreSQL, MySQL y Redis son programas de C.
  • Entornos de ejecución de lenguajes. CPython, el intérprete de referencia de Python, está escrito en C. También lo están MRI de Ruby, el motor Zend de PHP y el núcleo de Lua. Cuando Python es "demasiado lento", el arreglo suele ser una extensión en C.
  • Herramientas y bibliotecas. Git, curl, FFmpeg, OpenSSL, zlib y otra vez SQLite: la capa de infraestructura de la computación es C.

Es también por esto que la interfaz binaria de aplicación de C importa: casi cualquier lenguaje puede llamar a una función de C. Python, Rust, Go, Java y JavaScript tienen todos una forma de alcanzar bibliotecas de C. C es la lengua franca entre lenguajes.

Por qué aprender C

Hay dos respuestas honestas, y apuntan a personas distintas.

Si quieres trabajar en sistemas —núcleos, controladores, firmware embebido, bases de datos, motores de juegos— C es el lenguaje de trabajo de ese campo, y la mayoría de las ofertas de empleo en esas áreas lo nombran directamente (a menudo junto a C++ o Rust). Es difícil contribuir a Linux, a PostgreSQL o al código de un microcontrolador sin leer C con soltura.

Si quieres ser mejor en el lenguaje que ya usas, C te enseña lo que hay debajo. Después de C sabes por qué el índice de un array empieza en cero, qué es realmente una cadena, por qué pasar un objeto grande por valor sale caro, qué son la pila y el montón y a qué apunta realmente un puntero nulo. Esos conceptos aparecen en todos los lenguajes; C es donde están visibles en lugar de escondidos.

Ese programa son tres líneas de C y también una demostración completa de lo que es una variable: una caja con nombre en una dirección. En la mayoría de los lenguajes ni siquiera puedes hacer esa pregunta.

C y C++

C++ empezó en 1979 como "C con clases" y creció hasta ser uno de los lenguajes más grandes que existen: clases, plantillas, excepciones, sobrecarga de operadores, la STL, punteros inteligentes y una biblioteca estándar que empequeñece la especificación entera de C.

La relación en la práctica:

  • C++ conservó la sintaxis de C, así que if, for, while, los operadores, los punteros y los arrays se ven igual en ambos.
  • La mayoría del C bien escrito compila como C++, con algunas excepciones (C++ exige convertir el resultado de malloc, por ejemplo).
  • El código de C++ casi nunca es C válido.

Si piensas aprender ambos, aprender C primero es una ventaja real: C++ se construye directamente sobre el modelo de memoria de C, y las partes de C++ que más confunden a la gente —punteros, referencias, semántica de copia, destructores— son todas respuestas a problemas que C te muestra con claridad.

Aun así, C no es un subconjunto de C++ en ningún sentido oficial. Son estándares separados que evolucionan por separado, y el C moderno tiene características que C++ no tiene (los inicializadores designados llegaron en C99, los punteros restrict y los arrays de longitud variable).

Qué C: las versiones del estándar

C está estandarizado, y la versión importa cuando lees código antiguo.

EstándarAñoVale la pena conocerlo por
C89 / C901989La base antigua. Variables declaradas solo al inicio de un bloque.
C991999Comentarios //, declarar variables en cualquier parte, bool vía stdbool.h, long long
C112011Hilos, atómicos, funciones de biblioteca más seguras
C172018Una versión de corrección de errores de C11: el valor por defecto común hoy
C232024true/false/bool como palabras clave, nullptr, literales binarios

Esta documentación apunta a C17 y señala las características de C99 en adelante donde importan. Los compiladores usan por defecto algo moderno, pero puedes ser explícito:

gcc -std=c17 -Wall -Wextra hello.c -o hello

Lo que C no tiene

Parte de entender C es saber qué falta, porque casi toda pregunta de "¿cómo hago...?" tiene aquí una respuesta distinta a la de un lenguaje moderno.

  • Sin cadenas. Una cadena de C es un array de char que termina en un byte cero. Concatenar dos significa llamar a una función y preocuparse por si el destino es lo bastante grande.
  • Sin colecciones. No hay listas, mapas ni conjuntos. Tienes arrays fijos y punteros; una tabla hash es algo que escribes o enlazas desde una biblioteca.
  • Sin excepciones. Las funciones reportan los fallos devolviendo un valor especial —-1, NULL o un código de estado— y se espera que quien llama lo compruebe.
  • Sin genéricos ni sobrecarga. Un nombre de función significa una función. Es por eso que la biblioteca estándar tiene abs, labs y fabs para tres tipos distintos.
  • Sin espacios de nombres ni módulos. Toda función que no sea static comparte un único espacio de nombres global, que es por lo que las bibliotecas de C ponen prefijos a todo (sqlite3_open, png_read_info).
  • Sin recolector de basura. Cada malloc necesita un free a juego, y olvidarlo es una fuga de memoria.

Nada de esto son descuidos. Algunas son maquinaria de tiempo de ejecución que C se niega a cargar (un recolector de basura, el desenrollado de excepciones, cadenas que crecen), y eso explica en buena parte por qué cabe en un chip con 2 KB de RAM; otras, como los espacios de nombres y los genéricos, son características de lenguaje posteriores al diseño de C que se dejaron fuera para mantenerlo pequeño.

El búfer es de 32 bytes porque decidiste que bastaba. C no lo comprobará, y esa decisión es todo el carácter del lenguaje en una línea.

¿Es difícil C?

C es pequeño pero implacable. No hay mucha sintaxis que memorizar: puedes leer el lenguaje entero en una semana. Lo que lleva tiempo es la disciplina: seguir la pista de quién es dueño de cada trozo de memoria, recordar que una cadena no es más que bytes terminados en un cero, comprobar que un puntero no es nulo antes de seguirlo.

La mayor parte de la dificultad de C no está en sus conceptos sino en su falta de barandillas: el compilador no te salvará de una escritura fuera de límites ni de un puntero colgante, así que aprendes a ser preciso. (Los punteros en sí exigen un esfuerzo real la primera vez: eso es normal, y el capítulo de punteros los toma con calma.) Esa precisión es una habilidad que se transfiere a todos los lenguajes que uses después.

Preguntas frecuentes

¿Qué es el lenguaje de programación C?

C es un lenguaje de programación compilado y de propósito general creado por Dennis Ritchie en los Laboratorios Bell en 1972. Te da control directo sobre la memoria y se corresponde de cerca con lo que la CPU hace realmente, que es por lo que los sistemas operativos, los controladores de dispositivos y las bases de datos se siguen escribiendo en él.

¿Para qué se usa C hoy?

Núcleos de sistemas operativos (Linux, partes de Windows y macOS), firmware embebido en coches, electrodomésticos y microcontroladores, bases de datos como SQLite y PostgreSQL, entornos de ejecución de lenguajes como CPython y Redis, y bibliotecas críticas en rendimiento a las que otros lenguajes llaman.

¿Vale la pena aprender C en 2026?

Sí, por dos razones. Sigue siendo el lenguaje del trabajo de sistemas y embebido, que es un campo grande y bien pagado. Y enseña cómo funcionan realmente la memoria, los punteros y la pila, un conocimiento que te vuelve mejor en cualquier otro lenguaje, porque la mayoría están implementados en C.

¿Cuál es la diferencia entre C y C++?

C++ empezó como "C con clases" y conservó casi toda la sintaxis de C mientras agregaba programación orientada a objetos, plantillas, la biblioteca estándar y mucho más. C es mucho más pequeño: sin clases, sin excepciones, sin genéricos. La mayoría del C válido compila como C++, pero no al revés.

Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR