pause dev and c++ c system

and - system pause dev c++



¿Por qué debería evitarse la función system() en C y C++? (3)

Debes evitar la llamada al sistema porque

  • Esas llamadas no son portátiles, podrían no funcionar en otras plataformas.
  • Esas llamadas son caras para llamar, ¿por qué permitiría que se comieran sus recursos?

¿Cómo borrar tu consola? Puede usar std::cout << std::string(50, ''/n'');

He visto a mucha gente en los foros que dicen que se debe evitar la función system() , como system("cls") . No entiendo porque

Por favor, dime por qué debería evitar esta función. Y también, como clrscr() no funciona con CodeBlocks, ¿cuáles son otras formas de borrar la pantalla sin usar la función system() ?


Hay múltiples problemas aquí:

  • En primer lugar, system() como una función es multiplataforma y no solo para Windows o Linux. Sin embargo, los programas reales que se llaman pueden depender de la plataforma. Por ejemplo, puede usar system() para crear un directorio: system("md Temp") . Esto solo funcionará en Windows, ya que Linux no conoce un comando llamado md . Para Linux tendría que ser system("mkdir Temp") . Esto continúa, por lo que necesita una solución personalizada para cada plataforma.
  • Esto siempre generará un proceso hijo que luego ejecuta algo. En general, esto será más lento que algunos códigos en línea, por ejemplo, el comando o el programa debe cargarse, cargar sus propias dependencias, luego debe ejecutarse, etc., lo que generalmente es mucho más trabajo.

Si solo está haciendo algunas pruebas rápidas en una plataforma, usar system() está perfectamente bien, pero no debe usarlo en entornos de producción, a menos que realmente tenga que hacerlo. Por ejemplo, puede permitir que el usuario configure un programa externo que luego se ejecuta. Para algo como este system() está perfectamente bien.


Hay una respuesta sobre el uso del system() . Y no hay una forma estándar de C ++ para borrar la ventana de la consola. Para la plataforma Windows puede utilizar dicho código:

void clear() { COORD startPos = { 0, 0 }; HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO screen; DWORD written; GetConsoleScreenBufferInfo(hConsole, &screen); FillConsoleOutputCharacterA(hConsole, '' '', screen.dwSize.X * screen.dwSize.Y, startPos, &written); FillConsoleOutputAttribute(hConsole, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE, screen.dwSize.X * screen.dwSize.Y, startPos, &written); SetConsoleCursorPosition(hConsole, startPos); }

Y para Linux, nunca lo intenté, pero encontré el camino:

#include <curses.h> erase();