sistema (“pausa”); – ¿Por qué está mal?

Aquí hay una pregunta que no entiendo del todo:

El comando, system("pause"); se enseña a los nuevos progtwigdores como una forma de pausar un progtwig y esperar a que continúe una entrada de teclado. Sin embargo, parece ser desaprobado por muchos progtwigdores veteranos como algo que no debería hacerse en diversos grados.

Algunas personas dicen que está bien usar. Algunos dicen que solo debe usarse cuando estás encerrado en tu habitación y nadie está mirando. Algunos dicen que irán personalmente a tu casa y te matarán si la usas.

Yo mismo soy un nuevo progtwigdor sin entrenamiento de progtwigción formal. Lo uso porque me enseñaron a usarlo. Lo que no entiendo es que si no es algo para ser usado, ¿por qué me enseñaron a usarlo? O, por otro lado, ¿no es realmente tan malo después de todo?

¿Que piensas de este tema?

Está mal visto porque es un truco específico de la plataforma que no tiene nada que ver con aprender progtwigción, sino que se trata de una característica del IDE / OS: la ventana de la consola iniciada desde Visual Studio se cierra cuando el progtwig ha finalizado la ejecución, y así el nuevo usuario no puede ver el resultado de su nuevo progtwig.

Bodging in System (“pause”) ejecuta el progtwig de “pausa” de la línea de comandos de Windows y espera a que finalice antes de que continúe la ejecución del progtwig: la ventana de la consola permanece abierta para que pueda leer la salida.

Una mejor idea sería poner un punto de interrupción al final y depurarlo, pero eso nuevamente tiene problemas.

Es lento. Es dependiente de la plataforma. Es inseguro.

Primero: lo que hace. Llamar a “sistema” es, literalmente, como escribir un comando en el símbolo del sistema de Windows. Hay una tonelada de configuración y desassembly para su aplicación para realizar dicha llamada, y la sobrecarga es simplemente ridícula.

¿Qué ocurre si un progtwig llamado “pausa” se coloca en la RUTA del usuario? Simplemente llamar al sistema (“pausa”) solo garantiza que se ejecute un progtwig llamado “pausa” (¡espero que no tenga su ejecutable llamado “pausa”!)

Simplemente escriba su propia función “Pause ()” que usa _getch. OK, seguro, _getch también depende de la plataforma (nota: está definido en “conio.h”) – pero es mucho mejor que system() si está desarrollando en Windows y tiene el mismo efecto (aunque es su responsabilidad proporcionar el texto con cout o menos).

Básicamente: ¿por qué introducir tantos problemas potenciales cuando simplemente puede agregar dos líneas de código y una incluir y obtener un mecanismo mucho más flexible?

  • lento: tiene que pasar por un montón de código innecesario de Windows y un progtwig separado para una operación simple
  • no portátil: depende del progtwig de pausa
  • no es un buen estilo: hacer una llamada al Sistema solo debe hacerse cuando sea realmente necesario
  • más tipeo: System (“pause”) es más largo que getchar ()

un simple getchar () debería funcionar bien.

En resumen, tiene que pausar la ejecución de los progtwigs y hacer una llamada al sistema y asignar recursos innecesarios cuando podría estar usando algo tan simple como cin.get (). La gente usa el sistema (“PAUSE”) porque quieren que el progtwig espere hasta que presionen Enter para ver su salida. Si desea que un progtwig espere la entrada, hay funciones incorporadas para eso que también son multiplataforma y menos exigentes.

Explicación adicional en este artículo.

Usando el system("pause"); es Ungood Practice ™ porque

  • Es completamente innecesario .
    Para mantener la ventana de la consola del progtwig abierta al final cuando la ejecuta desde Visual Studio, use Ctrl + F5 para ejecutarla sin depuración, o bien ubique un punto de interrupción en el último corchete derecho } de main . Entonces, no hay problema en Visual Studio. Y, por supuesto, no hay ningún problema cuando lo ejecutas desde la línea de comando.

  • Es problemático y molesto
    cuando ejecuta el progtwig desde la línea de comando. Para la ejecución interactiva, debe presionar una tecla al final sin ningún propósito. ¡Y para usar en la automatización de algunas tareas, la pause es muy poco deseada!

  • No es portátil.
    Unix-land no tiene un comando de pause estándar.

El comando de pause es un comando interno cmd.exe y no se puede anular, como se afirma erróneamente en al menos otra respuesta. Es decir, no es un riesgo de seguridad, y la afirmación de que los progtwigs AV lo diagnostican como tal es tan dudosa como la pretensión de anular el comando (después de todo, un system invocación de progtwigs C ++ está en condiciones de hacer todo lo que el intérprete de comandos puede hacer, y más). Además, aunque esta forma de pausar es extremadamente ineficiente según los estándares habituales de la progtwigción en C ++, eso no tiene importancia alguna al final del progtwig de un novato.

Entonces, los reclamos en la horda de respuestas antes de esto no son correctos, y la razón principal por la que no debes usar system("pause") o cualquier otro comando de espera al final de tu main , es el primer punto anterior: es completamente innecesario, no sirve para nada, es muy tonto.

Puede usar std::cin.get() desde iostream :

 #include  // std::cout, std::cin using namespace std; int main() { do { cout << '\n' << "Press the Enter key to continue."; } while (cin.get() != '\n'); return 0; } 

Además, el system('pause') es lento e incluye un archivo que probablemente no necesite: stdlib.h . Depende de la plataforma, y ​​en realidad llama a un sistema operativo "virtual".

Porque no es portátil.

 pause 

es un progtwig solo para Windows / dos, por lo que este código no se ejecutará en Linux. Además, el system generalmente no se considera una muy buena forma de llamar a otro progtwig; por lo general, es mejor usar CreateProcess o fork u otro similar.

Como se enumera en las otras respuestas, hay muchas razones que puede encontrar para evitar esto. Todo se reduce a una razón que hace que el rest sea discutible. La función System() es intrínsecamente insegura / no confiable, y no debe introducirse en un progtwig a menos que sea necesario.

Para una asignación de estudiante, esta condición nunca se cumplió, y por esta razón fallaría una tarea sin siquiera ejecutar el progtwig si hubiera una llamada a este método. (Esto quedó claro desde el principio).

Para mí no tiene sentido en general esperar antes de salir sin razón. Un progtwig que ha hecho su trabajo debería terminar y devolver sus recursos a su creador.

Uno tampoco espera en silencio en un rincón oscuro después de un día de trabajo, esperando que alguien se incline sobre sus hombros.

Esta es una de las razones por las que no debes usarla: va a hacer enojar a la mayoría de los progtwigs antivirus que se ejecutan en Windows si pasas el progtwig a otra máquina porque es una amenaza a la seguridad. Incluso si su progtwig solo consiste en un simple cout << "hello world\n"; system("pause"); cout << "hello world\n"; system("pause"); Es un recurso pesado y el progtwig tiene acceso al comando cmd, que los antivirus ven como una amenaza.

el profesional a usar el sistema (“PAUSA”); mientras que la creación de pequeñas porciones de su progtwig es para depurarlo usted mismo. si lo usa para obtener resultados de variables antes durante y después de cada proceso que está utilizando para garantizar que funcionen correctamente.

Después de probarlo y moverlo a toda velocidad con el rest de la solución, debe eliminar estas líneas. es realmente bueno cuando se prueba un algoritmo definido por el usuario y se asegura de que se están haciendo las cosas en el orden correcto para los resultados que se desean.

De ninguna manera desea utilizar esto en una aplicación después de haberlo probado y asegurarse de que esté funcionando correctamente. Sin embargo, le permite hacer un seguimiento de todo lo que sucede a medida que sucede. No lo use para aplicaciones de usuario final.

Todo es una cuestión de estilo. Es útil para la depuración, pero de lo contrario no debería usarse en la versión final del progtwig. Realmente no importa en el tema de la memoria porque estoy seguro de que los tipos que inventaron el sistema (“pausa”) anticiparon que se usaría con frecuencia. En otra perspectiva, las computadoras se aceleran en su memoria para todo lo demás que usamos en la computadora de todos modos y no representa una amenaza directa como la asignación de memoria dinámica, así que lo recomendaría para depurar código, pero nada más.