Saltar al contenido principal
C23 de junio de 202675 min de lectura
Principiante75 min Full Stack Developer

C: de cero a avanzado

Tutorial completo de C: variables, operadores, control de flujo, funciones, arrays, strings, punteros y structs. Con 25 ejercicios.

CPunterosSistemasMemoriaProgramación

Lo que aprenderás

  • Entender variables, tipos y operadores en C
  • Dominar estructuras de control y funciones
  • Comprender punteros y gestión manual de memoria
  • Trabajar con arrays, strings y structs

¿Qué es C?

C es un lenguaje de programación de propósito general, de tipado estático y compilado, creado por Dennis Ritchie en los laboratorios Bell de AT&T entre 1969 y 1973. Es el lenguaje sobre el que se fundó gran parte del software moderno: el kernel de Linux, el intérprete de Python, Node.js y decenas de sistemas operativos están escritos en C.

Historia

C evolucionó del lenguaje B (Ken Thompson, 1969), que a su vez venía de BCPL. Se estandarizó por primera vez como ANSI C (C89/C90), y desde entonces ha tenido revisiones: C99 (bucles con declaración en for, tipos bool, _Bool), C11 (threads básicos, generics) y C17 (correcciones menores). El estándar en uso hoy en día es mayoritariamente C11 o C17.

Usos reales

Sistemas operativos

Linux, macOS XNU, Windows NT (partes)

Compiladores e intérpretes

GCC, Clang, CPython, Ruby MRI

Sistemas embebidos

Firmware de microcontroladores (Arduino, STM32)

Bases de datos

SQLite, partes de PostgreSQL y Redis

Redes

OpenSSL, libcurl, protocolo TCP/IP (kernel)

Videojuegos

Motores de juego, emuladores de consola

Flujo de compilación

Un programa en C pasa por cuatro fases antes de ejecutarse:

Preprocesador
Compilador
Ensamblador
Enlazador
Ejecutable
# Compilar con GCC (todo en uno)
gcc -std=c11 -Wall -Wextra -o programa main.c

# Flags útiles:
#   -Wall       activa las advertencias principales
#   -Wextra     advertencias adicionales
#   -std=c11    estándar C11
#   -O2         optimización nivel 2
#   -g          símbolos de depuración (para gdb)
#   -fsanitize=address  detecta errores de memoria (AddressSanitizer)

# Ejecutar
./programa

Hola, mundo

#include <stdio.h>    /* Librería estándar de E/S (printf, scanf...) */

int main(void) {
    printf("Hola, mundo\n");
    return 0;   /* 0 = éxito; cualquier otro valor = error */
}
Usa siempre -Wall -Wextra al compilar. Las advertencias del compilador te salvarán de muchos bugs.

Diferencias clave con otros lenguajes

CPython / JS
Compilado a código nativoInterpretado / JIT
Gestión manual de memoriaGarbage collector
Tipado estático estrictoTipado dinámico
Sin OOP nativaOOP integrada
Acceso directo a memoriaAbstracción de memoria
~100x más rápido (en operaciones de bajo nivel)Mayor productividad de desarrollo
1 / 9