6

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

4

3 回答 3

6

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

除此之外,正如评论中所指出的,大多数情况下(实际上是“大多数”,比如 99.999%),没有必要使用system.

于 2013-10-19T17:15:47.713 回答
5

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

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

于 2013-10-19T17:13:24.787 回答
1

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

于 2013-10-19T20:44:16.483 回答