66 votos

System("pause"); - ¿Por qué está mal?

Esta es una pregunta que no entiendo muy bien:

El comando, system("pause"); se enseña a los nuevos programadores como una forma de pausar un programa y esperar una entrada del teclado para continuar. Sin embargo, parece estar mal visto por muchos programadores veteranos como algo que no debe hacerse en diversos grados.

Algunas personas dicen que está bien usarla. Otros dicen que sólo se debe usar cuando se está encerrado en la habitación y nadie está mirando. Algunos dicen que vendrán personalmente a tu casa y te matarán si lo usas.

Yo mismo soy un nuevo programador sin formación formal en programación. Lo uso porque me enseñaron a usarlo. Lo que no entiendo es que si no es algo para usar, entonces ¿por qué me enseñaron a usarlo? O, por el contrario, ¿realmente no es tan malo después de todo?

¿Qué opina de este tema?

47voto

ravuya Puntos 4234

Está mal visto porque es un hack específico de la plataforma que no tiene nada que ver con el aprendizaje real de la programación, sino con una característica del IDE/OS: la ventana de la consola lanzada desde Visual Studio se cierra cuando el programa ha terminado de ejecutarse, por lo que el nuevo usuario no puede ver la salida de su nuevo programa.

Al introducir System("pause") se ejecuta el programa "pause" de la línea de comandos de Windows y se espera a que termine antes de continuar la ejecución del programa - la ventana de la consola permanece abierta para que pueda leer la salida.

Una mejor idea sería poner un breakpoint al final y depurarlo, pero eso de nuevo tiene problemas.

25voto

nlaq Puntos 11379

Es lento. Depende de la plataforma. Es inseguro.

Primero: Lo que hace. Llamar al "sistema" es literalmente como escribir un comando en el símbolo del sistema de Windows. Hay una tonelada de configuración y desmontaje para que su aplicación haga tal llamada - y la sobrecarga es simplemente ridícula.

¿Qué pasaría si se colocara un programa llamado "pause" en el PATH del usuario? Llamar simplemente a system("pause") sólo garantiza que se ejecute un programa llamado "pause" (¡espero que no tenga su ejecutable llamado "pause"!)

Simplemente escriba su propia función "Pause()" que utilice _getch. OK, claro, _getch también depende de la plataforma (nota: está definido en "conio.h") - pero es mucho más agradable que system() si está desarrollando en Windows y tiene el mismo efecto (aunque es su responsabilidad proporcionar el texto con cout o así).

Básicamente: ¿por qué introducir tantos problemas potenciales cuando se pueden añadir simplemente dos líneas de código y un include y obtener un mecanismo mucho más flexible?

16voto

Gavin H Puntos 6366
  • lento: tiene que pasar por un montón de código innecesario de Windows y un programa separado para una simple operación
  • no es portátil: depende de el programa de pausa
  • no es un buen estilo: hacer una llamada al sistema sólo debe hacerse hacer cuando realmente necesario
  • más de mecanografía: System("pause") es más largo que getchar()

un simple getchar() debería servir.

14voto

John T Puntos 14067

En resumen, tiene que pausar la ejecución del programa y hacer una llamada al sistema y asignar recursos innecesarios cuando podría estar usando algo tan simple como cin.get(). La gente utiliza System("PAUSE") porque quiere que el programa espere hasta que se pulse enter para poder ver su salida. Si quieres que un programa espere a la entrada, hay funciones incorporadas para ello que también son multiplataforma y menos exigentes.

Más explicaciones en este artículo.

8voto

a_m0d Puntos 5784

Porque no es portátil.

pause

es un programa sólo para Windows / dos, por lo que este su código no se ejecutará en linux. Además, system no se considera generalmente como una buena manera de llamar a otro programa - normalmente es mejor utilizar CreateProcess o fork o algo similar.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X