这是一个在 C 语言初学者中非常常见,但在现代开发中已基本被淘汰的函数,理解它对于学习计算机图形学的历史和原理非常有帮助。

textbackground 是什么?
textbackground 是一个 控制台文本模式 下的函数,它的作用是设置后续输出文本的背景颜色。
它不是 C 语言标准库(ANSI C)的一部分,而是 Borland C++ (Turbo C) 等 DOS 时代编译器 提供的一个特定于平台的库函数,这个函数定义在头文件 <conio.h> 中。
如何使用 textbackground
要使用 textbackground,你需要包含 <conio.h> 头文件,它的使用非常简单。
函数原型
void textbackground(int newcolor);
- 参数:
newcolor是一个整数值,代表你想要设置的背景颜色,这个值通常使用预定义的宏来表示,以提高代码可读性。 - 返回值: 无。
颜色常量
<conio.h> 头文件中定义了一系列表示颜色的宏:

| 颜色 | 宏定义 | 数值 |
|---|---|---|
| 黑色 | BLACK |
0 |
| 蓝色 | BLUE |
1 |
| 绿色 | GREEN |
2 |
| 青色 | CYAN |
3 |
| 红色 | RED |
4 |
| 洋红色 | MAGENTA |
5 |
| 棕色 | BROWN |
6 |
| 浅灰色 | LIGHTGRAY |
7 |
| 深灰色 | DARKGRAY |
8 |
| 亮蓝色 | LIGHTBLUE |
9 |
| 亮绿色 | LIGHTGREEN |
10 |
| 亮青色 | LIGHTCYAN |
11 |
| 亮红色 | LIGHTRED |
12 |
| 亮洋红色 | LIGHTMAGENTA |
13 |
| 黄色 | YELLOW |
14 |
| 白色 | WHITE |
15 |
配套函数:textcolor
textbackground 通常与 textcolor 函数一起使用,textcolor 用来设置文本(字符)本身的颜色。
应用示例
下面的代码展示了如何使用 textbackground 和 textcolor 在控制台输出不同颜色的文本。
#include <stdio.h>
#include <conio.h> // 包含 conio.h 头文件
int main() {
// 设置背景为蓝色,文本为白色
textbackground(BLUE);
textcolor(WHITE);
// clrscr(); // 这是一个清屏函数,也在 conio.h 中,用于清空控制台
printf("Hello, World! (背景: 蓝色, 文本: 白色)\n");
// 改变设置:背景为红色,文本为黄色
textbackground(RED);
textcolor(YELLOW);
printf("This text has a red background and yellow color.\n");
// 改变设置:背景为绿色,文本为黑色
textbackground(GREEN);
textcolor(BLACK);
printf("And this one is green with black text.\n");
// 恢复默认设置(通常是黑底白字)
textbackground(BLACK);
textcolor(WHITE);
printf("This is back to the default.\n");
// 注意:getchar() 用于暂停程序,以便你看到输出结果
// 在某些现代IDE中,控制台窗口会立即关闭
printf("Press any key to exit...");
getch(); // 也是 conio.h 中的函数,等待用户按下一个键
return 0;
}
为什么 textbackground 现在很少使用了?
textbackground 的核心问题是它的可移植性极差。
- 平台特定:它源于 DOS 时代的 Borland/Turbo C 编译器,在 Windows 平台上,它可以通过一些旧版本的编译器(如 Turbo C++ for Windows)或模拟环境(如 DOSBox)来运行,但在 Linux、macOS 以及现代的 Windows 控制台 中,这个函数是完全不可用的。
- 标准缺失:C 语言标准库(ISO C/ANSI C)中并没有定义
conio.h以及其中的任何函数(如textbackground,textcolor,clrscr,getch等),这意味着任何依赖这些函数的代码都不能算是标准的 C 语言程序。 - 现代替代方案:现代操作系统提供了更强大、更灵活的方式来控制终端颜色,通常是 ANSI 转义码。
现代的跨平台替代方案:ANSI 转义码
几乎所有的现代终端(包括 Windows 10/11 的新版控制台、Linux 终端、macOS Terminal)都支持 ANSI 转义码,这是一种通过在字符串中插入特定序列来控制文本格式(颜色、光标位置等)的国际标准。

工作原理
格式为: 下面的代码是跨平台的,可以在任何支持 ANSI 转义码的现代终端中运行。
虽然 \033[ 或 \e[ 后面跟格式代码,最后以 m
\033 是 ASCII 码中的转义字符。[ 是开始标记。m 表示“设置图形属性”(如颜色)结束。颜色代码
3 + 颜色代码 (30-37)4 + 颜色代码 (40-47)
颜色
文本代码
背景代码
黑色
3040
红色
3141
绿色
3242
黄色
3343
蓝色
3444
洋红色
3545
青色
3646
白色
3747使用 ANSI 转义码重写示例
#include <stdio.h>
// 定义一些宏来简化代码
#define KRED "\x1B[31m"
#define KGREEN "\x1B[32m"
#define KYELLOW "\x1B[33m"
#define KBLUE "\x1B[34m"
#define KMAGENTA "\x1B[35m"
#define KCYAN "\x1B[36m"
#define KWHITE "\x1B[37m"
#define KBLACK "\x1B[30m"
#define BRED "\x1B[41m"
#define BGREEN "\x1B[42m"
#define BYELLOW "\x1B[43m"
#define BBLUE "\x1B[44m"
#define BMAGENTA "\x1B[45m"
#define BCYAN "\x1B[46m"
#define BWHITE "\x1B[47m"
#define BBLACK "\x1B[40m"
#define RESET "\x1B[0m" // 重置所有格式
int main() {
printf("Hello, World! (%s背景: 蓝色, 文本: 白色%s)\n", BBLUE, KWHITE, RESET);
printf("%sThis text has a red background and yellow color.%s\n", BRED, KYELLOW, RESET);
printf("%sAnd this one is green with black text.%s\n", BGREEN, KBLACK, RESET);
printf("This is back to the default.\n");
// 也可以组合使用
printf("%sThis is bold red text on a green background!%s\n", "\x1B[1;31m", "\x1B[42m", RESET);
printf("\nPress Enter to exit...");
getchar(); // 标准C函数,等待用户输入
return 0;
}
特性
textbackground (conio.h)ANSI 转义码
时代
DOS / 16位 Windows
现代 (Win10+, Linux, macOS)
平台
非跨平台,仅限旧环境
高度跨平台
标准
非标准 C
国际标准 (ECMA-48)
依赖
需要
<conio.h>仅需标准
<stdio.h>
可移植性
差
好
推荐度
不推荐用于任何新项目
强烈推荐
textbackground 是学习 C 语言历史和 DOS 编程的一个有趣知识点,但在今天进行任何形式的开发时,都应该避免使用它,请选择使用 ANSI 转义码 来为你的控制台应用程序添加颜色,因为它更现代、更强大、更可靠,并且是跨平台的。
