Entorno de desarrollo para trabajar con C y C++, con integración para VS Code.
Por defecto se incluye un "Hello World" y algunos archivos que combinan C y C++ para tener de ejemplo un poco de todo. Se pueden borrar tranquilamente. Lo importante es la estructura de carpetas y, obvio, que esté el archivo principal.
Tabla de Contenidos
Para armar este repositorio fui agregando características paso a paso.
También fui dejando comentarios en la parte de C/C++ de cosas que iba aprendiendo que me parecieron interesantes, así como algunas cosas de sintaxis básicas que fui anotando para quienes no sepan nada o casi nada de C/C++ (como era mi caso).
Agregué un script para viajar entre esos cambios, para poder ver cómo se fueron agregando las distintas partes:
# Muestra el instructivo (inicio, siguiente, anterior, etc.)
./scripts/viaje.sh ayudaNote
Aunque la idea principal es que se use en modo solo lectura, tiene protección por si haces cambios mientras viajas (por si experimentas), pero podría fallar en algún caso que no haya testado.
¿Qué incluye?
- Soporte Híbrido C/C++: Estructura preparada para compilar módulos en C puro, C++ o interoperabilidad entre ambos (
extern "C"). - Sistema de compilación automatizado (Make): Manejo de compilación incremental, banderas de optimización/warning y rastreo automático de headers.
- Formateo automático (
clang-format): Estilo de código unificado basado en las guías de Google, integrado para formatear al guardar en VS Code. - Análisis estático / Linter (
clang-tidy): Detección en tiempo real de errores de memoria, variables no usadas y malas prácticas en el IDE. - Autocompletado e IntelliSense: Generación de
compile_commands.json(bear) para navegación precisa entre símbolos en VS Code y otros IDEs. - Instalador de dependencias: Script en
scripts/install.shcompatible con Ubuntu, Debian y Fedora.
¿Qué sigue?
- Detección de fugas de memoria: Integración de análisis dinámico (Valgrind / AddressSanitizer) para rastrear fugas de memoria y accesos inválidos en tiempo de ejecución.
- Depuración visual en VS Code: Configuración para depurar, usar puntos de interrupción e inspeccionar variables directamente en el editor.
Si no tienes git, primero instálalo:
# Debian/Ubuntu
sudo apt-get install -y gito
# Fedora
sudo dnf install -y gitLuego clona el repositorio:
git clone https://github.com/anibalxyz/c-workspace.git
cd c-workspaceInstala todas las herramientas necesarias según la distribución Linux (por ahora Debian/Ubuntu y Fedora):
sudo ./scripts/install.shEsto instalará: gcc, g++, make, clang-format, clang-tidy, bear
El repositorio incluye la carpeta .vscode/ con la configuración del proyecto.
Configuraciones:
- Formateo automático al guardar utilizando
.clang-format - Lectura de
compile_commands.jsonpara IntelliSense (ver comandocompiledben workflow automático) - Escaneo de la configuración de
clang-tidypara linting integrado en el IDE (ver comandolinten workflow automático)
Al abrir el directorio en VS Code, el IDE aplicará automáticamente las configuraciones para este proyecto.
Extensiones:
Tip
En caso de no contar con alguna extensión necesaria, el propio editor sugerirá su instalación al abrir el proyecto.
Este workflow es recomendado, más aún para proyectos medianos/grandes.
También es al que le presto más atención, así que siempre va a estar actualizado, mientras que no aseguro lo mismo en el Manual.
Luego puedes ejecutar make help para ver los comandos listados y más resumidos, sin necesidad de tener esto abierto.
Compilar:
# Compila los archivos fuente que hayan sido actualizados. Esto se llama compilación incremental
# Opcional: MAIN=<archivo_principal> por si cambias el nombre del punto de entrada actual
makeEjecutar:
# Simplemente un alias de `./bin/app`
# Opcional: MAIN=<archivo_principal>. Si en `make` pasaste un nombre distinto, úsalo aquí también
make runPara no repetir MAIN=<archivo_principal> constantemente, puedes modificarlo en el archivo Makefile directamente.
Limpiar (por si se quiere compilar desde cero):
# Borra los directorios build/ y bin/
make cleanFormatear:
# Formatea todos los archivos fuente y headers
make formatGenerar compile_commands.json:
make compiledbTip
Esto es útil para que el IntelliSense del IDE funcione correctamente.
Si el proyecto es pequeño va a funcionar igual gracias a las configuraciones por defecto del IDE, pero es recomendable usarlo por si acaso.
Se debe ejecutar cuando se elimina, renombra o agrega un archivo (.c o .cpp), o cuando se modifican las flags de compilación.
Linting (depende de tener generado compile_commands.json):
make lintTip
Algunas reglas pueden ser demasiado estrictas si se está experimentando o aprendiendo.
Si te molestan las puedes desactivar todas seteando "C_Cpp.codeAnalysis.clangTidy.enabled" en false
en el archivo .vscode/settings.json.
Si solo quieres desactivar alguna puntual, bórrala de la lista "Checks" en el archivo .clang-tidy.
Edita el código fuente src/ y las cabeceras include/ a tu gusto.
En esta versión manual, se compilará todo (sin importar si hubo cambios o no) directo al binario.
Compilar:
g++ -Wall -Wextra -Iinclude $(find src -type f \( -name "*.c" -o -name "*.cpp" \)) -o bin/appEjecutar:
./bin/appNote
Si cambias el nombre del archivo principal, cámbialo también en estos comandos. bin/app -> bin/<archivo_principal>
Formatear:
clang-format -i $(find src include -name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp")Linting:
clang-tidy -p . $(find src -type f \( -name "*.c" -o -name "*.cpp" \))