# Code::Blocks

Code::Blocks es un entorno de desarrollo integrado de código abierto, que soporta múltiples compiladores, que incluye GCC, Clang y Visual C++. Se desarrolló en C++ usando wxWidgets como el kit de herramientas GUI. Utilizando una arquitectura de complemento, sus capacidades y características están definidas por los complementos proporcionados. A la fecha octubre de 2017, Code::Blocks está orientado hacia C, C++ y Fortran. Tiene un sistema de compilación personalizado y un soporte de construcción opcional.
Debido a que Dev-C++ es un IDE para los lenguajes C y C++ y está creado en Delphi, surgió la idea y necesidad de crear un IDE hecho en los lenguajes adecuados: C y C++. Con esta motivación se creó Code::Blocks.
Code::Blocks está licenciado bajo la Licencia pública general de GNU y está disponible para Windows, Linux y macOS y ha sido portado a FreeBSD, OpenBSD y Solaris.

## Historia

Después de liberar dos versiones candidatas para versión final (release candidate), 1.0rc1 el 25 de julio de 2005 y 1.0rc2 el 25 de octubre de 2005, en vez de crear una versión final, los desarrolladores del proyecto decidieron no hacerlo, y comenzaron a añadir algunas características nuevas, con lo que la liberación de una versión final comenzó a ser repetidamente pospuesta. Por el contrario, se disponía frecuentemente (casi diariamente) de paquetes binarios de la última versión del repositorio SVN -llamadas "nightly builds"-, que los usuarios podían descargar y utilizar. Estas normalmente recibían mejor soporte que la última versión oficial lanzada, la 1.0rc2. Mientras que este método proveía a los usuarios de las últimas mejoras del IDE y permitía a los desarrolladores obtener información constante del funcionamiento, se creó la falsa ilusión de que el proyecto estaba estancado (debido a que no salían nuevas versiones oficiales).
La primera versión estable fue finalmente liberada el 28 de febrero de 2008, con el número de versión 8.02. El esquema de numeración para la versión fue cambiado al mismo seguido por Ubuntu, donde el mayor número (el primero) representa el año y el menor representa el mes de la versión liberada.
El modelo de trabajo continúo siendo el mismo. En vez de crear dos ramas, una para la versión final, donde las correcciones de bugs se añadían y otra rama de desarrollo donde se incluían nuevas características; todas las nuevas características y correcciones de bugs son añadidas en el mismo espacio de código. En realidad los desarrolladores realizan las modificaciones cada uno en su propio entorno, y solo añaden modificaciones cuando están seguros de su buen funcionamiento. Esto hace que las versiones "nightly build" sean muy estables y usables.
Jennic Ltd distribuye una versión de Code::Blocks configurada para trabajar con sus microcontroladores.

## Características

Code::Blocks es un IDE construido como un núcleo altamente expandible mediante complementos (plugins). Actualmente la mayor parte de la funcionalidad viene provista por los complementos incluidos por defecto. No es un IDE autónomo que acepta complementos, sino que es un núcleo abstracto donde los complementos se convierten en una parte vital del sistema. Esto lo convierte en una plataforma muy dinámica y potente, no solo por la facilidad con que puede incluirse nueva funcionalidad, sino por la capacidad de poder usarla para construir otras herramientas de desarrollo tan solo añadiendo complementos.

### Edición visual

Code::Blocks 13.12 incluye wxSmith un complemento que provee la funcionalidad para la creación y edición visual de una interfaz gráfica de usuario la cual es una adaptación de wxWidgets basada en la versión 2.9.4.

### Soporte de compiladores

Debido a que en sí Code::Blocks es solo la interfaz del entorno de desarrollo, puede enlazarse a una variedad de compiladores para poder desarrollar su trabajo. Por defecto, Code::Blocks buscará una serie de compiladores y configurará los que halle.
Algunos de los compiladores compatibles:
* Borland C++ Compiler;
* Digital Mars Compiler;
* GCC, en sus versiones para Microsoft (ya sea MinGW o Cygwin) y GNU/Linux;
* Intel C++ Compiler;
* LLVM Clang;
* Microsoft Visual Studio Toolkit (una extensión de compilador de C++ de Microsoft);
* Open Watcom.
Tomemos en cuenta que en la página oficial se puede descargar el IDE Code::Blocks + Compilador si así lo desea no es necesario buscar otro compilador.
Todos estos compiladores pueden ser detectados automáticamente si están ya instalados al iniciar Code::Blocks.
Aunque no es oficialmente compatible (producto de su bajo nivel de adhesión a la norma de C++), Microsoft Visual Studio 6 puede ser configurado y utilizado, aunque no con muy buenos resultados.
También es posible añadir compatibilidad con otros compiladores.

### Características del entorno

Entre otras, Code::Blocks soporta varias de las características ya consideradas "clásicas" y que sirven de apoyo a la programación:
* Espacios de trabajo (workspaces) para combinar múltiples proyectos.
* Espacio de trabajo adaptable (cambia según la tarea que se esté realizando o como se configure).
* Navegador de proyectos; vista de archivos, símbolos (heredados, etc.), clases, recursos.
* Editor tabulado, múltiples archivos.
* Intercambio rápido .h/.cpp.
* Lista de tareas (ToDo).

### Características de edición

* Coloreo de sintaxis configurable.
* Tabulación inteligente de código.
* Autocódigo (generar plantillas de código para proyectos).
* Compleción automática de código.
** Lista desplegable.
** Vista de argumentos de una función.
** Selección múltiple de funciones sobrecargadas.
* Generación de clases (class wizard).
* Búsquedas avanzadas de cadenas dentro de archivos: actual, abiertos, proyecto, workspace, en carpetas).

### Características de compilación

* Sistema de construcción (build) rápido (sin necesidad de makefiles).
* Soporte para compilación en paralelo (usando múltiples procesadores/núcleos).
* Dependencias entre proyectos dentro del espacio de trabajo.
* Proyectos con múltiples objetivos (multi-target).
* Estadísticas y resumen de código (code profiler).

### Características de depuración

* Interfaz con GNU GDB.
* Soporta MS CDB (no completamente).
* Puntos de ruptura (breakpoints).
** Código, datos.
** Ruptura condicional.
* Funciones locales (argumentos).
* Ver valores de variables (también definidas por el usuario).
* Pila de llamadas.
* Desensamblado de código.
* Volcados de memoria.
* Múltiples hilos (threads).
* Registros de la CPU.

### Compatibilidad con bibliotecas

Code::Blocks trae integradas plantillas para generar varias clases de programas, ya sea la clásica aplicación de consola, bibliotecas estáticas o dinámicas, o proyectos completos enlazados con populares bibliotecas como OpenGL y SDL; sin embargo, Code::Blocks integra solo las plantillas, las bibliotecas deben instalarse por separado.

### Más características

Otras características de Code::Blocks:
* Importación de proyectos Visual C++ y Dev-C++;
* Soporte para packs del Dev-C++;
* Inclusión y generación de plug-ins;
* Generación de XML para proyectos;
* Exportación a formatos XML, RTF y ODT.