Saltar a contenido

Entorno de desarrollo en C++

Compiladores C++ en Windows

Empezamos la aventura instalando en Windows diferentes compiladores para código C++.

En primer lugar MinGW (Minimalist GNU for Windows) y Clang LLVM los podemos encontrar en https://winlibs.com/, concretamente en el ZIP para 64 bits GCC 11.2.0 + LLVM/Clang/LLD/LLDB 13.0.0 + MinGW-w64 9.0.0 (MSVCRT).

Después de descomprimirlo en el disco C:\mingw64 y añadir el directorio C:\mingw64\bin al PATH de sistema puedo comprobar que dispongo tanto del compilador g++ como clang++ en una terminal:

Así mismo he instalado el compilador MSVC de Visual Studio Community 2019, que podemos comprobar mediante cl.exe en la Developer PowerShell:

Las diferentes funcionalidades soportadas por cada compilador pueden encontrarse en las tablas comparativas en la web https://en.cppreference.com/w/cpp/compiler_support.

Sin más, lo próximo será configurar algún editor para empezar a programar código.

Ejecutar código C++ con VSC

Una vez configurados los compiladores deseados, la forma más sencillo de compilar y ejecutar un fichero en VSC es instalar la extensión Code Runner.

Una vez instalada, para compilar y ejecutar el típico Hola Mundo, podemos crear un main.cpp en un directorio, presionar F1 y buscar la opción Run Code:

#include <iostream>

int main()
{
    std::cout << "Hola Mundo!";
    return 0;
}

El resultado será la salida por pantalla:

Debemos tener en cuenta que esta extensión probará un compilador automáticamente.

Si queremos extender la configuración de compilación deberemos crear un directorio .vscode en el proyecto y un fichero settings.json establecer la configuración deseada.

Por ejemplo para utilizar GCC++20:

{
    "code-runner.executorMap": {
        "cpp": "cd $dir && g++ -std=c++20 *.cpp -o $fileNameWithoutExt && ./$fileNameWithoutExt.exe"
    }
}

Para utilizar Clang++20:

{
    "code-runner.executorMap": {
        "cpp": "cd $dir && clang++ -std=c++20 *.cpp -o $fileNameWithoutExt && ./$fileNameWithoutExt.exe"
    }
}

Para utilizar Cl++latest:

{
    "code-runner.executorMap": {
        "cpp": "cd $dir && cl.exe /Zi /std:c++latest /EHsc /Fe: $fileNameWithoutExt.exe $fileName && $dir$fileNameWithoutExt.exe",
    }
}

Nota: Para hacer funcionar la configuración de CL se debe abrir Visual Studio Code desde la Developer Powershell estando situado en el directorio del proyecto:

cd /directorio/proyecto
code .

Por mi parte estaré utilizando generalmente la configuración de GCC+20, por lo que configuraré por defecto el editor de esa forma desde Archivo > Preferencias > Configuración. Buscando la opción code-runner.executorMap:

Y ahí estableciendo una configuración por defecto para ahorrarme el settings.json en cada proyecto:

Consejo: Podemos añadir un cls && justo después de cd $dir para limpiar la terminal (o clear en Linux/Mac):

En cuanto al intelliSense (remarcador de sintaxis), para que sea compatible con la versión 20 se hace desde Ver > Paleta de comandos > C/C++: Editar configuraciones (UI):

En la nueva ventana cambiaremos esta opción:

Sin más, con esto deberíamos tenerlo todo listo.

Primer programa en C++

Como es costumbre se puede empezar a aprender creando un programa Hola Mundo:

#include <iostream>

int main()
{
    std::cout << "Hello World!" << std::endl;
    return 0;
}

En la primera línea encontramos la importación de un componente de la biblioteca estándar (STL) de C++ para manejar operaciones de entrada/salida.

Si no lo importamos el editor se quejará haciendo referencia a que los miembros cout y endl no se encuentran definidos:

El nombre iostream es un acrónimo de Input/Output Stream y es que el flujo de entrada y salida de datos en C++ (y su predecesor C) no se encuentra definida dentro de la sintaxis básica y se provee por medio de librerías de funciones especializadas como ésta, que define los siguientes objetos:

  • cin: Flujo de entrada
  • cout: Flujo de salida
  • cerr: Flujo de error no almacenado.
  • clog: Flujo de error almacenado.
  • endl: Fin de línea.

En cualquier caso, lo que encontramos en nuestro programa es un primer bloque de código:

int main()
{
}

Este bloque es una función cuyo nombre es main y este nombre es muy especial pues le indica al programa que esta es la función principal y se debe empezar a ejecutar desde aquí. Además como es lógico solo puede existir una única función main en el programa.

En cuanto al texto impreso en la terminal, corresponde a la porción:

std::cout << "Hello World!" << std::endl;

Aquí tenemos la instrucción std::cout para iniciar un flujo de salida y el operador de inserción << que permite insertar en el flujo caracteres entre comillas dobles, acabando con la inserción de un fin de línea std::endl y el respectivo punto y coma ; que finaliza la instrucción.

Esta instrucción podemos escribirla varias veces para imprimir tantas líneas como deseemos:

std::cout << "Primera linea" << std::endl;
std::cout << "Segunda linea" << std::endl;
std::cout << "Tercera linea" << std::endl;

Finalmente, la función principal main espera algún tipo de retorno para saber que el programa ha finalizado, generalmente se indica un return 0 para devolver un número 0:

return 0;

Como punto interesante comentar que, por defecto este código fuente se ejecuta en la terminal de Windows sin codificación, incapaz de entender los símbolos especiales latinos:

Podemos importar la librería Windows.h y justo antes de mostrar por pantalla el texto establecer la codificación UTF-8 para que la terminal decodifique correctamente los símbolos:

Con esto hemos revisado las instrucciones básicas de un programa con C++.


Última edición: 07 de Mayo de 2022