C宏预处理器:在字符串中插入十进制控制码
实现十进制控制码插入的CC宏方案
要实现用十进制数插入控制码到字符串的需求,我们可以利用C语言的预处理器数值计算和八进制转义序列特性,编写如下宏:
// 计算八进制各位数字(适用于0-255范围的控制码) #define OCT_HIGH(n) ((n) / 64 % 8) #define OCT_MID(n) ((n) / 8 % 8) #define OCT_LOW(n) ((n) % 8) // 生成对应十进制数的控制码字符串片段 #define CC(n) "\\" #OCT_HIGH(n) #OCT_MID(n) #OCT_LOW(n)
使用示例
按照你的需求编写代码:
// Decimal 10 and 13 are ASCII LF and CR resp. char mystring[] = "This is line 1" CC(10) CC(13) "This is line 2";
这段代码会被预处理器展开为:
char mystring[] = "This is line 1" "\012" "\015" "This is line 2";
其中\012对应十进制10(LF换行符),\015对应十进制13(CR回车符),相邻的字符串字面量会被编译器自动合并为一个完整字符串,最终mystring的内容就是带换行和回车的完整文本。
说明
- 该宏适用于0-255范围内的十进制控制码,覆盖了常见ASCII控制码及自定义硬件的控制码需求。
- 预处理器会自动将输入的十进制数转换为对应的八进制转义序列,确保编译时直接生成目标字符,无需运行时计算。
内容的提问来源于stack exchange,提问作者Kay
相关产品推荐
相关产品推荐

