Curso C++

1. Compilador

Para que un programa se ejecute, tiene que ser leído por el procesador. Pero acá comienza el primer inconveniente: el procesador solo entiende un único lenguaje, el código máquina (secuencia de unos y ceros), mientras que nosotros escribimos utilizando lenguajes de alto nivel, con palabras legibles y lógicas.

Acá es donde entra el Compilador, un programa que tiene como trabajo tomar nuestro código fuente (archivos .cpp) y traducirlos al lenguaje del procesador. Es decir, transforma nuestras instrucciones legibles a instrucciones binarias.

Pero el compilador no trabaja solo. Para poder finalmente tener un archivo ejecutable (un .exe), necesitamos también al Enlazador (o Linker). Este se encarga de tomar lo que tradujo el compilador y unirlo a las librerías que son necesarias, para finalmente “empaquetar” todo en un archivo ejecutable.

La buena noticia es que, habitualmente, tanto el compilador como el enlazador vienen juntos en un solo programa. A nuestros ojos, simplemente entregamos archivos .cpp y recibimos un archivo .exe.

Instalación Windows

En Windows podemos utilizar un compilador llamado MinGW, el más utilizado para esa plataforma.

  • Instalar MSYS2. Este es un gestor de paquetes que facilita la instalación del compilador.
  • Ejecutamos el instalador.
  • Indicamos en qué carpeta lo vamos a querer instalar. Se recomienda dejarlo por defecto (usualmente C:\msys64).

  • Hacemos ‘click’ en ‘Next’.

  • Hacemos ‘click’ en ‘Finish’.

Se abrirá una terminal en la que podremos descargar el Compilador utilizando la librería Pacman. Para esto colocamos lo siguiente:

pacman -S mingw-w64-ucrt-x86_64-gcc

Le estamos indicando que baje varios programas que nos van a servir para programar, incluyendo el compilador y GDB, el cual se utiliza para hacer Debug.

Cuando haya finalizado, en la misma terminal escribimos:

g++ --version

Esto no instala nada, sino que nos confirma qué versión del compilador acabamos de instalar.

Si intentamos usar esto desde una terminal normal de Windows y nos muestra un error indicando que no reconoce qué es g++, debemos realizar un paso extra para que el Sistema Operativo se entere de que acabamos de instalar un compilador.

Abrimos el Explorador de archivos y buscamos la carpeta de instalación. Si usaron MSYS2 por defecto, la ruta suele ser C:\msys64\ucrt64\bin. Ingresamos y copiamos la ruta exacta de la barra de direcciones. Ahora sí, con esto copiado, debemos agregar la ruta en las Variables de Entorno de Windows.

  • Ingresamos a las configuraciones del sistema operativo.
  • En el buscador podemos escribir “variables” o “entorno” para que nos facilite el acceso a esta configuración.
  • Vamos a ver dos espacios: User Variables y System Variables. En User Variables (Variables de usuario) buscamos la fila que dice Path y seleccionamos Edit (Editar).
  • Nos abre una nueva ventana y a la derecha buscamos la opción New (Nuevo). Esto nos habilita un espacio para ingresar texto. Es acá donde pegamos la ruta a la carpeta bin que acabamos de copiar.
  • Seleccionamos Ok para guardar los cambios.

Abrimos de vuelta la terminal (si se cerró, andá al botón de inicio y escribí cmd para abrir el Símbolo del sistema). Probamos colocando una vez más g++, y también vemos si instaló el compilador de C (gcc) y el debugger (gdb):

gcc --version
g++ --version
gdb --version

Ahora sí debería reconocerlo. Si no lo hace, reiniciá la computadora e, incluso, podés revisar si la ruta que pegaste es la correcta.

Instalación Linux

En Linux todo tiende a ser más simple. Solo debemos abrir la terminal y colocar el siguiente comando, según la distribución que utilices:

Debian / Mint / Ubuntu

sudo apt update && sudo apt install build-essential

Fedora

sudo dnf install gcc-c++

Arch

sudo pacman -S base-devel

Utilización del compilador

Con todo instalado, podemos hacer la primera prueba: nuestro primer programa.

  • Abrimos un programa que nos permita escribir texto sin formato. En Windows puede ser el Bloc de Notas. En Linux, dependiendo qué entorno gráfico utilicen, pueden abrir Kate o Gedit, por ejemplo.
  • Pegan el siguiente código, el cual nos muestra 'Hola mundo' en la misma terminal en la que vamos a ejecutar el Compilador:
#include <iostream>
using namespace std;

int main(){
    cout << "Hola mundo";
    return 0;
}
  • Lo guardamos colocando como extensión del archivo .cpp. Por ejemplo: holamundo.cpp.
  • Cerramos el archivo y vamos a la Terminal o Consola de Comandos.

El compilador necesita que le indiquemos qué archivo fuente queremos utilizar y cómo queremos llamar al archivo ejecutable que nos termine generando. El primero ya lo tenemos, es el archivo holamundo.cpp. Para el segundo, podemos elegir que se llame programa.

Vamos a la Terminal, navegamos hasta la carpeta donde guardamos el archivo y escribimos lo siguiente:

g++ holamundo.cpp -o programa

Analicemos el comando: g++ es el compilador. Luego le sigue el archivo que queremos compilar, holamundo.cpp. En este punto hay que aclarar que si la terminal no está en la misma carpeta, debemos escribir la ruta completa. Por ejemplo:

g++ C:\Documents\holamundo.cpp -o programa

La instrucción más importante es -o. Se trata de una bandera que indica el output (salida). Finalmente, escribimos el nombre del programa ejecutable. Si lo dejamos así, el ejecutable se generará en la misma carpeta donde estamos parados.

Si vamos a la carpeta, veremos que junto al archivo .cpp ahora tenemos un archivo .exe (en Windows) o un ejecutable sin extensión (en Linux). Si hacemos ‘doble click’ vamos a notar algo curioso: se abre una terminal pero se cierra al instante. ¿Por qué? ¿Falló?

No, para nada. Funcionó, pero el programa solo tenía una instrucción: imprimir un ‘Hola mundo’. Lo hace, y como no tiene más instrucciones, finaliza y se cierra. Entonces, ¿cómo lo podemos ver? En la misma terminal en la que ejecutaron el compilador ponemos:

./programa

De esta manera ejecutamos el programa dentro de la consola que ya tenemos abierta. Verán lo siguiente:

@ usuario:
g++ holamundo.cpp -o programa

@ usuario:
./programa

@ usuario:
Hola mundo

Ese ‘Hola mundo’ que aparece en la terminal es nuestro programa corriendo con éxito.

Banderas (Flags)

Además de -o tenemos otras banderas que nos van a ser útiles durante la compilación. Por ejemplo:

-Wall: Nos muestra todas las advertencias (Warnings) que nuestro código genere. Por ejemplo, si estamos realizando instrucciones donde puede haber pérdida de datos, esta bandera nos advertirá. No son errores, sino avisos; el programa compila igual, pero nos avisa que algo podría salir mal.

-pedantic: Nos muestra como advertencias todo lo que escribamos que no se ajuste estrictamente a las normas ISO de C++.

-pedantic-errors: Si queremos que nuestro código sea impecable, esta bandera trata a todas las advertencias como errores. Es decir, si hay una advertencia, frena la compilación y no nos entrega el ejecutable.

-std=c++14: De esta manera le indicamos al compilador la versión de C++ con la que queremos trabajar.

La manera de usar las banderas es colocándolas en la misma instrucción que utilizamos para compilar. Por ejemplo, si queremos ver todas las advertencias:

g++ holamundo.cpp -Wall -o programa

Si queremos también que nos indique cuándo nos alejamos de las normas ISO:

g++ holamundo.cpp -Wall -pedantic -o programa

Podemos colocar todas las banderas que necesitemos en la misma línea.

¡Prueben instalar el Compilador y generar el primer ejecutable!

Saludos.