为什么通过系统("color YX")更改控制台应用程序中C++颜色不是最佳解决方案?

Why changing colors in C++ console application by system("color YX") is not the best solution?

本文关键字:颜色 C++ 应用程序 控制台 解决方案 最佳 系统 color YX 为什么      更新时间:2023-10-16

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

为什么选择

#include<windows.h>
...
HANDLE hOut;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hOut,BACKGROUND_RED);

更好吗?

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

系统(命令)在与系统/控制台通信时是否真的会使用额外的层,使用第二种方法可以避免什么?

我为什么要使用第二种方法还有其他原因吗?

我为什么要使用第二种方法还有其他原因吗?

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

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

请注意,由于color是一个控制台内部命令,它的执行几乎是即时的。然而,对于非内部的命令,它将创建另一个进程,并在该单独的进程中执行该命令。

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