⌘ REFERENCIA · 61 elementos
Cheatsheet de C23 moderno
El lenguaje, el toolchain y el tooling de sistemas en un solo sitio. Busca por sintaxis, flag o herramienta.
⚙️ Compilación 6
Compilar C23gcc -std=c23 a.c -o a
Avisos (actívalos siempre)-Wall -Wextra -Wpedantic
Avisos → errores-Werror
Símbolos de depuración + optimización-g -O2
Parar tras preprocesar / compilar / ensamblar-E / -S / -c
Guardar .i .s .o intermedios-save-temps
✨ Novedades C23 7
Inferencia de tipoauto x = 42;
Constante de compilación con tipoconstexpr int N = 256;
Puntero nulo con tipo (mejor que NULL)nullptr
Tipo de una expresióntypeof(x)
Entero de N bits exactos_BitInt(N)
Incrustar binario en el código#embed "archivo"
Atributos estándar[[nodiscard]] [[fallthrough]]
🧠 Punteros y memoria 6
Dirección de / contenido en&x · *p
Reservar en el heapmalloc(n * sizeof *p)
Reservar a cero / redimensionarcalloc(n, sz) / realloc
Liberar y evitar colgantefree(p); p = nullptr;
Puntero genéricovoid *
Puntero a funciónint (*f)(int,int)
🔢 Tipos 6
Enteros de ancho fijouint8_t int32_t (stdint.h)
Tamaño / posición de camposizeof x · offsetof
Puntero a const (solo lectura)const char *s
Tipos compuestosstruct / union / enum
Enum con tipo fijo (C23)enum E : uint8_t
Alias de tipotypedef struct X X;
🏗️ Build: Meson y Make 6
Configurar (una vez)meson setup build
Compilarmeson compile -C build
Build con sanitizers (Meson)-Db_sanitize=address
Construir / limpiarmake · make clean
Make: objetivo / prereqs / primer prereq$@ $^ $<
Objetivo que no produce archivo.PHONY: clean
🔗 Linking y bibliotecas 7
Crear biblioteca estáticaar rcs lib.a *.o
Crear biblioteca dinámica (.so)-fPIC -shared
Enlazar libmates (ruta + nombre)-L. -lmates
Símbolos (T=def, U=indef)nm a.o
Dependencias dinámicasldd prog
Secciones / sección dinámica ELFreadelf -S / -d
Link-Time Optimization-flto
🛡️ Sanitizers y análisis 7
Errores de memoria (ASan)-fsanitize=address
Undefined Behavior (UBSan)-fsanitize=undefined
Condiciones de carrera (TSan)-fsanitize=thread
Memoria en runtimevalgrind --leak-check=full
Análisis estático de GCCgcc -fanalyzer
Analizadores estáticosclang-tidy / cppcheck
Fuzzing con libFuzzer-fsanitize=fuzzer
🔒 Seguridad (hardening) 5
Canarios de pila-fstack-protector-strong
Comprobaciones en libc-D_FORTIFY_SOURCE=3
ASLR (posición aleatoria)-fPIE -pie
GOT de solo lectura-Wl,-z,relro,-z,now
Funciones con límite de tamañosnprintf (no sprintf)
🧵 Concurrencia 5
Hilos (threads.h)thrd_create / thrd_join
Exclusión mutuamtx_lock / mtx_unlock
Variable atómicaatomic_int (stdatomic.h)
Operación atómicaatomic_fetch_add
Orden de memoriamemory_order_acquire/release
🔧 Herramientas 6
Depuradorgdb ./prog
Ver syscallsstrace ./prog
Perfilar rendimientoperf stat / record
Desensamblarobjdump -d
Tipo de binario (ELF, estático/dinámico)file prog
Ver el LLVM IRclang -S -emit-llvm