gpt4 book ai didi

c++ - 为什么不应在 Windows 特定应用程序中使用 'system'

转载 作者:搜寻专家 更新时间:2023-10-31 02:10:48 26 4
gpt4 key购买 nike

我正在制作 Windows 应用程序,其目的是通知我连接中断并记录它们以供以后使用/报告。现在我使用批处理脚本来实现相同的目标并考虑将其合并到项目中但是当我调查这个主题时我遇到了我应该的多个建议 not ever use system within any of my C++ programs .大多数时候,原因是“它是特定于操作系统的”和“资源需求”我明白了,但我想知道:为什么它不好如果我的目的是专门为 Windows 操作系统制作应用程序,我会使用 system,特别是如果它是可以在后台运行的轻量级程序

编辑:我想这需要澄清,所以更多的来源:

  • system() in C/C++ :

    1. It’s a very expensive and resource heavy function call
    2. It’s not portable: Using system() makes the program very non-portable i.e. this works only on systems that have the pause command at the system level, like DOS or Windows. But not Linux, MAC OSX and most others.
  • I strongly disagree with using the system function(此处引用太长)

  • Are system() calls evil?

    1. system() is less flexible. (Fine with me)
      1. It offers no control of the command being executed. (Fine with me, I just need a return value from the script)
      2. It is not quite platform independent. (Now, this would be a concern. I would really love to see an example where it behaves differently on different platforms)
      3. It is a security concern. (Again, this would be an issue. Can someone provide an example of a potential security problem with system()? )

其中一些论点目前与我的项目无关,所以在这种特殊情况下我不介意它们,但结合我读过的所有这些问题似乎表明应该避免使用 system() 调用不惜一切代价。所以我想我应该使用另一种方法(我发现了很多)但至少现在对我来说所有这些方法似乎都太复杂了(即:this 而不是仅仅附加我已经运行的整个脚本,这是关于该长度的一半(25 行))

最佳答案

为什么 system 被认为是不好的做法:

  • 您无法控制命令(它是在 shell 中启动的,...)
  • 存在安全问题(主要是别名问题)
  • 它不便携
  • system 不允许您进行高级错误管理和输出/输入管理(例如,您不能将命令的输出保存在变量中)

但是如果您不关心这些问题,您可以使用system。计算机科学中几乎没有绝对规则 (*)。有时被认为是不好的做法(比如 system)可能就足够了,只要你知道为什么不好的做法并花时间思考为什么你使用不好的做法(而不是使用好的做法)练习)。

因此,如果您不关心关于为什么 system 不好的论点,请使用它,但要记住为什么这是一个不好的做法。

编辑:

(*) 规则,比如你不使用系统,或者不使用原始指针......除非你有充分的理由,否则应该遵守这些规则不要。

关于c++ - 为什么不应在 Windows 特定应用程序中使用 'system',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44648986/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com