Skip to content

About

Entorno de desarrollo para trabajar con C/C++. Incluye integración para VS Code.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

12 Commits

Folders and files

Repository files navigation

c-workspace

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

Introducción

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 ayuda

Note

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.sh compatible 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.

Instalación

1. Clonar el repositorio

Si no tienes git, primero instálalo:

# Debian/Ubuntu
sudo apt-get install -y git

o

# Fedora
sudo dnf install -y git

Luego clona el repositorio:

git clone https://github.com/anibalxyz/c-workspace.git
cd c-workspace

2. Instalar herramientas

Instala todas las herramientas necesarias según la distribución Linux (por ahora Debian/Ubuntu y Fedora):

sudo ./scripts/install.sh

Esto instalará: gcc, g++, make, clang-format, clang-tidy, bear

Configuración para VS Code

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.json para IntelliSense (ver comando compiledb en workflow automático)
  • Escaneo de la configuración de clang-tidy para linting integrado en el IDE (ver comando lint en 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.

Workflow

Automático

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
make

Ejecutar:

# Simplemente un alias de `./bin/app`
# Opcional: MAIN=<archivo_principal>. Si en `make` pasaste un nombre distinto, úsalo aquí también
make run

Para 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 clean

Formatear:

# Formatea todos los archivos fuente y headers
make format

Generar compile_commands.json:

make compiledb

Tip

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 lint

Tip

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.

Manual

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/app

Ejecutar:

./bin/app

Note

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" \))

About

Entorno de desarrollo para trabajar con C/C++. Incluye integración para VS Code.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Contributors

Languages