Al programar en C++, especialmente para entornos específicos, nos encontramos con situaciones donde el comportamiento del programa puede ser inesperado si no se tienen en cuenta las particularidades del sistema operativo. A diferencia de macOS y Linux, Windows presenta ciertas peculiaridades a la hora de programar, que debemos tener en cuenta, como, por ejemplo, el uso de la función "system()".
El Problema de la Ejecución Rápida en Windows
Un error común a la hora de tratar de ejecutar un programa compilado para el sistema operativo Windows es que ocurra algo como esto. Aparentemente, el programa intenta ejecutarse, pero termina por cerrarse de forma inesperada.
En realidad, el programa no contiene ningún error. Al contrario de lo que pensamos, lo que está ocurriendo es que el programa se abre y tras terminar de ejecutarse las instrucciones que han sido programadas, finalmente su ventana se cierra. El ordenador es rápido; nuestra visión no lo es tanto.
Así que para ver el resultado en cuestión en pantalla, lo que deberíamos hacer es tratar de que, una vez que termine el programa de ejecutarse, la ventana quede congelada, permitiéndonos, así, ver la salida de nuestro programa.
Solución Temporal: Implementando system("pause")
Para lograr que la ventana de la consola permanezca abierta tras la ejecución del programa, una técnica común es el uso de system("pause"). Para ello, abrimos el código fuente y, justo antes de la instrucción return, incluimos una función que indica que se produzca una pausa en la ventana de trabajo, system("pause").
Lea también: IVA 21% Excel
Esta función se encuentra incluida en la biblioteca stdlib, así que debemos incluirla. Es importante recalcar que esta instrucción solo debe ser incluida en el código fuente que vayamos a compilar para generar el programa ejecutable para Windows.
Una vez realizados los cambios, guardamos los cambios y volvemos a compilar. Una vez hemos compilado, se habrá generado un nuevo programa ejecutable en la carpeta en la que estemos trabajando, en mi caso, en el Escritorio, y podemos volver a ejecutar dicho programa.
Como podemos ver, ahora sí la ventana ha quedado congelada y podemos ver la salida de nuestro programa. También lo podrías usar, varios lo utilizan con ese fin, hacer una pausa.
Advertencias y Consideraciones sobre el Uso de system("pause")
A pesar de su aparente utilidad, el uso de system("pause") en C++ es un tema que genera debate en la comunidad de programadores. Desde mis inicios en C++ se me aconsejó no utilizar system(“pause”), ya que era una mala práctica.
Una de las principales razones para evitarlo es que esto no es portable. Eso solo funciona si existe una orden pause que el intérprete de comandos del sistema operativo pueda ejecutar. Depende de que la librería usada la proporcione, pero no podemos suponer que exista en todos los compiladores.
Lea también: Guía IVA reducido
Además, system("pause") usa mas recursos que las demás: necesita llamar a un programa externo (el intérprete de órdenes); si éste reconoce la orden, la ejecutará. Si no la reconoce, llamará a otro programa (o dará error).
Incluso, se han manifestado preocupaciones sobre su seguridad y estabilidad. Había escuchado, mas no lo llegué a investigar, que incluso system(“pause”) puede causar conflictos mayores al sistema operativo. ¿Qué tan cierto es? No me ha pasado el caso, pero es muy probable que suceda.
En resumen, aunque system("pause") puede ser una solución rápida para la pausa de la consola en Windows, no es la práctica más recomendada. Esta es la forma correcta.
Lea también: ¿Cómo localizar tus XML del SAT?
