¡Esta es una revisión vieja del documento!
Este paso es opcional, y si ya está instalado adecuadamente el compilador C++, Geany ya funcionará adecuadamente sin necesidad de llevarlo a cabo. Sin embargo, recomendamos realizar este paso para configurar algunas opciones para el compilador, que ayudan a detectar errores muy comunes al programar, más fácilmente.
Basta con realizar la configuración siguiente una única vez, y ya quedará así configurada automáticamente para todos los programas C++ que escribamos.
Una vez abierto Geany, vamos al menú “Construir” / “Build”, y seleccionamos “Configurar Comandos de Construcción” / “Set Build Commands”. Allí reemplazamos el valor de la columna “Comando” / “Command” de la fila “Compilación” / “Compile” (Sección C++ commands) por la siguiente línea completa:
g++ -std=c++11 -g -O2 -Wconversion -Wshadow -Wall -Wextra -D_GLIBCXX_DEBUG -c “%f”
Hacemos lo mismo con la línea que está inmediatamente debajo, “Construcción” / “Build”, reemplazándola por lo siguiente:
g++ -std=c++11 -g -O2 -Wconversion -Wshadow -Wall -Wextra -D_GLIBCXX_DEBUG -o “%e” “%f”
Cerramos la ventana presionando “Aceptar” / “Ok”. Con esto ya tenemos el entorno completamente configurado, y estamos listos para crear programas en Geany.
La siguiente información no es necesaria en absoluto para programar. Conocer exactamente qué efecto tiene cada una de las opciones anteriores no es importante en una primera etapa.
No obstante, para el beneficio de programadores avanzados de C++, se resume a continuación una explicación de cada opción propuesta.
-std=c++11
: Esta opción permite utilizar C++11, y hoy en día casi todas las competencias de programación lo utilizan.-g
: Retiene información de símbolos de debugging en el ejecutable final. Esto significa que se puede ver qué funciones se están ejecutando al utilizar un debugger o ante un "core dump". Generalmente es irrelevante si no se utilizan debuggers.-O2
: Le indica al compilador que optimice el código con nivel de optimización 2
, si bien para testing no cambia, casi todas las competencias de programación utilizan este nivel, así que es mejor usarlo para no tener diferencias al ejecutar en nuestra compu o en el servidor.-Wconversion
: Activa un warning extremadamente útil, que hace que el compilador nos avise si se convierte un tipo en otro de forma tal que se podría perder precisión. Los casos más comunes, que pueden dar lugar a errores en el programa, ocurren al convertir un long long
en un int
(el valor puede no entrar, ocurriendo overflow), o al convertir un double
en algún tipo entero (quizás truncar de esa manera no era la idea del programador). int x = cadena.size();
), basta introducir un cast explícito para eliminar el warning (en el ejemplo anterior, haciendo int x = int(cadena.size());
). Simplemente no usar -Wconversion para que no salten esos warnings en primer lugar es una solución mucho peor, porque perdemos la posibilidad de detectar rápidamente muchísimos errores en el programa.-Wshadow
: Activa un warning extremadamente útil, que hace que el compilador nos avise si una variable en un ámbito interno (“local”) oculta o “pisa” una variable en un ámbito más externo (“global”).-Wall
: Activa varios “warnings” del compilador extremadamente útiles para detectar errores comunes (por ejemplo cosas como olvidarse el return
en una función) .-Wextra
: Activa aún más “warnings” que la opción anterior (por ejemplo, detecta algunos casos de "undefined behaviour" en tiempo de compilación).-D_GLIBCXX_DEBUG
: Activa verificaciones de “chequeos de rangos” en tiempo de ejecución, para todas las funciones de la STL de C++. vector
fuera de rango, o se hace .pop()
de una queue
vacía (por ejemplo), se obtiene inmediatamente un error en tiempo de ejecución indicando eso, en lugar de que el programa potencialmente falle en forma totalmente silenciosa y difícil de detectar.