当前位置: 首页 > news >正文

C语言中的CSI_START和CSI_END宏

#define CSI_START  "\033["
#define CSI_END    "\033[0m"

这两个 #define 是 C/C++ 中的预处理器宏定义,用于定义 ANSI 转义序列的字符串常量,通常用于在支持 ANSI 转义码的终端(如大多数 Linux、macOS 终端和现代 Windows 终端)中控制文本的显示格式,比如颜色、背景、光标位置等。

让我们分别解释:

1. #define CSI_START "\033["

  • #define: 这是 C/C++ 的预处理器指令,用于定义一个宏。在编译之前,预处理器会将源代码中所有出现的 CSI_START 替换为后面的字符串 "\033["

  • CSI_START: 这是一个宏名称,是 “Control Sequence Introducer Start” 的缩写,意为“控制序列引导符开始”。

  • "\033[": 这是宏的实际值,一个字符串字面量。

    • \033: 这是八进制转义序列,表示 ASCII 码为 27 的字符,也就是 ESC (Escape) 字符。在 ANSI 转义序列中,ESC 字符是所有控制序列的起始标志。
    • [: 这是紧跟在 ESC 字符后面的字符,与 ESC 一起构成了标准的 CSI (Control Sequence Introducer)。完整的 CSI 是 ESC [
  • 作用: CSI_START 定义了 ANSI 控制序列的开头部分。当你需要向终端发送一个格式化命令时,通常以 CSI_START 开头,后面跟上具体的参数和最终命令字母。

    示例用法:

    // 假设要设置文本颜色为红色 (31m)
    printf("%s31mThis text is red%s\n", CSI_START, CSI_END);
    // 展开后相当于: printf("\033[31mThis text is red\033[0m\n");
    

2. #define CSI_END "\033[0m"

  • CSI_END: 这是另一个宏名称,意为“控制序列引导符结束”或更准确地说是“格式重置”。

  • "\033[0m": 这是宏的值。

    • \033[: 和 CSI_START 一样,是 CSI 序列的开头。
    • 0m: 这是具体的 ANSI 命令。
      • 0 是参数,表示“重置/正常”。
      • m 是命令字母,表示“设置图形属性”(SGR - Select Graphic Rendition)。
  • 作用: CSI_END 定义了一个特殊的 ANSI 序列,用于重置所有先前应用的文本格式(如颜色、粗体、下划线等),将文本样式恢复到终端的默认状态。

    为什么重要:

    • 如果你只设置了颜色(如红色)但没有用 CSI_END 重置,那么之后在该终端输出的所有文本都将是红色的,直到再次设置颜色或重置。
    • 使用 CSI_END 可以确保格式化效果只作用于你期望的文本范围。

    示例用法:

    printf("Normal text, %s31mred text%s, back to normal.\n", CSI_START, CSI_END);
    // 输出: "Normal text, [红色的]red text[恢复正常], back to normal."
    

easylog 库中的典型用途

在日志库(如 easylog)中,这些宏通常用于实现彩色日志。例如:

// 定义不同日志级别的颜色宏
#define LOG_COLOR_DEBUG   CSI_START"36m"    // 青色
#define LOG_COLOR_INFO    CSI_START"32m"    // 绿色
#define LOG_COLOR_WARN    CSI_START"33m"    // 黄色
#define LOG_COLOR_ERROR   CSI_START"31m"    // 红色// 打印一条带颜色的错误日志
printf("%s%sError: Something went wrong!%s\n", LOG_COLOR_ERROR, CSI_START, CSI_END); 
// 或者更常见的是:
// printf(LOG_COLOR_ERROR "Error: Something went wrong!" CSI_END "\n");

总结

  • CSI_START "\033[": 定义了 ANSI 转义序列的起始部分(ESC [),用于开始一个格式化命令。
  • CSI_END "\033[0m": 定义了一个用于重置所有文本格式的 ANSI 序列,确保格式化效果不会“泄漏”到后续输出中。

这两个宏使得在 easylog 这样的库中添加和管理彩色输出变得非常方便和清晰。

http://www.dtcms.com/a/346161.html

相关文章:

  • 拿到手一个前端项目,应该如何启动
  • 多目标跟踪中基于目标威胁度评估的传感器控制方法复现
  • lanczos算法学习笔记
  • 【GM3568JHF】FPGA+ARM异构开发板 测试命令
  • OFD格式文件及Python将PDF转换为OFD格式文件
  • Informer参数代码
  • SPI的DMA方式
  • 线性回归:从原理到实战的完整指南
  • ROS中的自定义消息
  • Windows 11 安装 Miniforge,配置国内源
  • 基层医疗遇到了什么问题?
  • 【spring security】权限管理组件执行流程详解
  • centos7安装oracle19c流程(自用)
  • Highcharts 推出适用于 Svelte 的官方集成库
  • 【软考架构】关系数据库
  • 无人机电机与螺旋桨的匹配原理及方法(一)
  • 随机森林--集成学习
  • 华为网路设备学习-29(BGP协议 四)路由策略-实验
  • 虚拟线程(高版本JDK)
  • 在 SymPy 中代入抽象函数的数值和导数值
  • JSP入门详解
  • Leetcode—1148. 文章浏览 I【简单】
  • AI重构消费决策:从AI试衣间降退货率到预判式复购,购物效率提升新逻辑
  • FROM Buggy_Code SELECT Liability_Causes # 民法典之故障代码责任溯源
  • Prompt工程完全指南:从基础结构到AI时代的上下文革命
  • 意识上传与智能增强:脑机接口与AI共塑的人类未来图景
  • 如何用批量钱包实现链上“身份伪装”?
  • PADS Logic软件及相关工具
  • s3cmd使用方法
  • 常见整流电路总结