系统()有什么不好?

What's so bad about system()?

本文关键字:什么 系统      更新时间:2023-10-16

既然你正在构建一个Windows专属程序,为什么调用system()如此讨厌?自从我开始在C++编程以来,"不要触摸系统"是我经常听到的。我温顺地遵守了这个原则,但这有什么不好的呢?

您在系统调用中放入的内容取决于您将在其上运行程序的操作系统。所以它是完全不便携的。此外,很多事情都可能出错,因为你只是把一个命令扔进了虚空,并希望一切都会好起来的。错误处理(例如 - 您要运行的程序不存在,或 PATH 设置不正确,或者您没有权限等)非常困难甚至不可能。

除此之外,正如评论中大多数时候(实际上是"大多数",如 99.999%)所指出的那样,没有必要使用 system .

std::system()要求您信任该命令来执行所需的操作。您无法验证此假设是否合理。例如,PATH 环境变量的异常值可能会导致执行与标准设置不同的程序。

调用std::system()的行为取决于系统。即使目前的要求是应用程序不需要在其他操作系统上运行,此要求也可能更改。考虑到std::system()通常用于可以通过更便携的方式实现的目的(尤其是初学者),因此不需要在此处引入平台依赖性。

system()

操作系统的命令解释器作为单独的进程调用。 很多时候,有本机 API 可以直接在调用进程中完成相同的结果,并对其进行更多控制。