Why should the system() function be avoided in C and C++?

Shubham picture Shubham · Nov 11, 2013 · Viewed 9.4k times · Source

I have seen a lot of people on forums telling to avoid the system() function, like system("cls"). I don't understand why.

Please tell me why I should avoid this function. And also, as clrscr() doesn't work with CodeBlocks, what are other ways to clear screen without using the system() function?

Answer

Mario picture Mario · Nov 11, 2013

There are multiple problems here:

  • First of all, system() as a function is cross-platform and available not just on Windows or Linux. However, the actual programs being called might be platform dependant. For example, you can use system() to create a directory: system("md Temp"). This will only work on Windows, as Linux doesn't know a command called md. For Linux it would have to be system("mkdir Temp"). This goes on, so you'd need a custom solution for each and every platform.
  • This will always spawn a child process that's then executing something. This will in general be slower than some inlined code, e.g. the command or program has to be loaded, has load it's own dependencies, then it has to be executed etc. which is usually a lot more work.

If you're just doing some quick testing on one platform, using system() is perfectly fine, but you shouldn't use it in production environments, unless you really have to. For example, you could allow the user to set an external program that is then executed. For something like this system() is perfectly fine.