在命令提示符和 PowerShell 中运行 C++ 程序的区别

dev*_*531 4 c c++ powershell command-prompt

在 C 和 C++ 命令行程序中,在命令提示符或 PowerShell 中运行程序之间有什么区别吗?(例如:异常处理、I/O 速度等)

mkl*_*nt0 6

主要区别:

  • cmd.exe提供真正的二进制(字节流)管道,以便>重定向运算符可以捕获外部程序的原始字节输出。

  • 从 7.2 版本开始,PowerShell 只使用文本(字符串)与外部程序进行通信,包括输入和输出,这意味着外部程序输出总是被解码为 .NET 字符串,这具有以下含义:

    • 即使只使用 PowerShell 的>操作符将外部程序的输出发送到文件,外部程序输出的每一行都首先被解码为 .NET 字符串,然后在保存到目标文件时再次编码,在这种情况下使用Out-Filecmdlet 的默认编码,>运算符是其有效别名。

      • Windows PowerShell 中,该(特定于 cmdlet 的)编码是 UTF-16LE(“Unicode”),而在PowerShell (Core) 6+ 中,它是无 BOM 的 UTF-8,该编码在该 PowerShell 版本中一致使用。
    • 这种解码-重新编码循环不仅会减慢速度,还意味着:

      • 对于文本输出,输入字符编码(从外部程序解码)可能与 PowerShell 输出的字符编码不同。

      • 二进制输入和输出从根本上不受支持

        • 最简单的解决方法是委托 to cmd.exewith cmd /c ...(在 Windows 上)和 to /bin/shwith sh -c ...(在类 Unix 平台上。
    • 有关更多信息,请参阅此答案