Características del lenguaje C++

C++ es un lenguaje compilado

Para ejecutar los programas escritos, el código fuente debe pasar por dos etapas de procesamiento. El código que escribes es solo texto de caracteres que el ordenador no entiende; el compilador convierte estos símbolos textuales en instrucciones legibles por la CPU, es decir, lenguaje máquina, el único conjunto de órdenes que el CPU puede ejecutar línea a línea.

  1. Compilación: El compilador lee los archivos fuente y genera archivos objeto;
  2. Enlace: El enlazador une varios archivos objeto para generar un programa ejecutable.

Un proyecto C++ suele estar formado por varios archivos fuente. A continuación se muestra un diagrama esquemático del flujo:

El archivo ejecutable generado está vinculado a hardware y sistemas operativos específicos, no se puede usar directamente en distintas plataformas (un programa para Mac no se puede ejecutar directamente en un PC Windows).

La portabilidad del C++ de la que se habla habitualmente se refiere a la portabilidad del código fuente: el mismo conjunto de archivos fuente se puede compilar por separado en distintos sistemas y funcionar correctamente.

En otras palabras, el archivo EXE compilado en Windows no sirve si lo copias en Mac. Lo que hay que hacer es copiar el mismo texto fuente (archivos .cpp y .h) al Mac y compilarlo con el compilador C++ de macOS para obtener un ejecutable compatible con ese sistema.

Norma ISO C++

La norma ISO C++ define dos componentes principales

  1. Características básicas del lenguaje: capacidades nativas del propio lenguaje, como tipos primitivos char/int, bucles for/while, etc.
  2. Componentes de la biblioteca estándar: conjunto de herramientas oficial incluido, contenedores como vector/map, salida con <<, lectura de entrada con getline() y otras operaciones de E/S.

Toda la biblioteca estándar está implementada en código C++ puro y viene integrada en todos los compiladores principales; solo muy pocos escenarios de bajo nivel (como el cambio de contexto de hilos) usan una pequeña cantidad de lenguaje máquina.

¿Por qué necesitamos la biblioteca estándar? La biblioteca estándar es similar a los SDK que mencionamos hoy en día. Su propósito es reducir el trabajo de los programadores de C++. Si cada funcionalidad básica tuviera que ser desarrollada desde cero por cada desarrollador, muy poca gente usaría este lenguaje. Por ejemplo, imprimir una línea de texto en la consola supondría un trabajo enorme si cada programador escribiera esa lógica por su cuenta. Para solucionarlo, los creadores de C++ escribieron un conjunto completo de código predefinido, lo compilaron en bibliotecas (.lib) y lo pusieron a disposición de los desarrolladores. En resumen, evita reinventar la rueda, aumenta mucho la eficiencia de desarrollo y atrae a más usuarios.

La biblioteca estándar no utiliza trucos de sintaxis especiales, está escrita totalmente en C++, por lo que puedes leer su código fuente completo y crear herramientas personalizadas similares.

C++ es un lenguaje de tipado estático

El compilador debe conocer explícitamente el tipo de todas las variables, valores, identificadores y expresiones en el lugar donde se usan en el código. El tipo de un objeto determina directamente qué operaciones admite.

Ventaja principal del tipado estático: la comprobación de tipos se realiza durante la compilación. Muchos errores son detectados por el compilador mientras escribes el código, evitando que el programa se bloquee en tiempo de ejecución, combinando seguridad y rendimiento. Es decir, cuando el compilador convierte tu código a lenguaje máquina, señalará un error si detecta tipos incompatibles. Por ejemplo, guardar un nombre de texto en una variable entera destinada a la edad generará un error de compilación. Los errores de compilación se pueden corregir inmediatamente; los errores en tiempo de ejecución son mucho más complicados de solucionar, especialmente si el software ya se ha distribuido a los usuarios finales.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *