我有一个C函数,用于格式化具有以下签名的字符串:
int
string_format
( char* dst
, const char* fmt
, ...
);
我通常这样称呼它:
char buf[20];
const char* name = "Jeff";
string_format ( buf , "Hello %s!\n" , name );
我现在try 使用ANSI colored颜色 代码处理彩色文本.理想情况下,我想在字符串字面量中使用它们,如下所示:
char buf[20];
const char* name = "Jeff";
string_format ( buf , COLOR_RED "Hello %s!\n" , name );
我编写了一些宏来构建这些字符串文字,但我做错了一些事情.例如,我try 过:
#define ANSI_CC(color) "\033["#color"m"
#define ANSI_CC_FG_RED "91"
#define COLOR_RED (ANSI_CC(ANSI_CC_FG_RED))
但是,当我try 呼叫string_format (buf, COLOR_RED "Hello world.\n"")
时,我得到了一个编译器错误:
error: expected ')' before string constant
| COLOR_RED "Hello world.\n"
^~~~~~~~~~~~~~~~
我的 idea 是,预处理器将COLOR_RED
的计算结果归结为:
COLOR_RED =>
(ANSI_CC(ANSI_CC_FG_RED)) =>
"\033["ANSI_CC_FG_RED"m" =>
"\033[""91""m"
但显然它在做其他事情,我不明白;我怀疑我错误地使用了#
字符串化操作符.有人能解释一下预处理器是怎么处理我写的宏的吗?另外,如果我想要实现的目标是可能的,我需要改变什么?
谢谢.