C++ 为什么要在C++;系统控制台应用程序(“color YX”)不是最佳解决方案?

C++ 为什么要在C++;系统控制台应用程序(“color YX”)不是最佳解决方案?,c++,windows,console,C++,Windows,Console,我在某个地方读到,(知道这两种方法都只适用于windows)使用系统并不是最好的解决方案 为什么 #包括 ... 处理hOut; hOut=GetStdHandle(标准输出句柄); SetConsoleTextAttribute(小时,背景为红色); 更好吗 据我所知,这个系统(“coloryx”)改变了整个控制台的颜色。然而,我认为有一种方法可以做到这一点,即在打印文本时“打开和关闭”一些颜色 在与系统/控制台通信期间,系统(命令)是否会使用附加层,使用第二种方法可以避免什么 有没有其他理

我在某个地方读到,(知道这两种方法都只适用于windows)使用系统并不是最好的解决方案

为什么

#包括
...
处理hOut;
hOut=GetStdHandle(标准输出句柄);
SetConsoleTextAttribute(小时,背景为红色);
更好吗

据我所知,这个系统(“coloryx”)改变了整个控制台的颜色。然而,我认为有一种方法可以做到这一点,即在打印文本时“打开和关闭”一些颜色

在与系统/控制台通信期间,系统(命令)是否会使用附加层,使用第二种方法可以避免什么

有没有其他理由让我使用第二种方法

有没有其他理由让我使用第二种方法


system(command)
将在任何系统上编译,无论“command”是什么。使用windows函数可确保代码仅在实际运行的系统上编译。接下来,如果你想移植这段代码,你会得到一个明确的编译器错误,这样你就可以花更少的时间来追踪代码不工作的原因。

优化方面,系统(命令)调用创建一个单独的进程,传递参数“color XY”,然后该进程搜索命令“color”并执行它

注意,因为color是一个控制台内部命令,所以它的执行非常迅速。但是,对于非内部命令,它将创建另一个进程并在该单独进程中执行该命令


这意味着创建两个非常慢的进程(每个进程有2Mb的堆栈,完整的进程信息,如IP地址、寄存器、stdin/stdout/stderr等)

+1也很容易为OS X或Unix创建一个包装器,以提供与
SetConsoleTextAttribute
函数等效的功能,而这些系统上没有
颜色
命令。
#include<windows.h>
...
HANDLE hOut;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hOut,BACKGROUND_RED);