我想知道是否有人想出了一个聪明的宏,它会根据哪个源文件调用printf来改变控制台的打印颜色。
我能够弄清楚如何做到这一点的最好方法是。
//print.h
#define PRINT_NORMAL printf("\033[0m");
#define PRINTF(style, ...) printf(style); printf(__VA_ARGS__); PRINT_NORMAL
//myfile.h
#define MYFILE_STYLE "\033[1;34m"
//myfile.c
...
PRINTF(MYFILE_STYLE, "Something with myfile style");
...
我想知道是否有一些偷偷摸摸的方式我可以定义PRINTF以便它不需要样式参数,基本上抓取一个局部变量用作样式。
编辑:
在写完最后一句后,我立刻想到了。
我应该能够在每个.c文件中定义一个本地样式变量,并将我的宏更改为
#define PRINTF(...) printf(style); printf(__VA_ARGS__); PRINT_NORMAL
下一个问题:是否有更好的方法来组合这3个printf语句?
答案 0 :(得分:1)
在(新)calculateStyle()
模块中创建一个函数print.c
,它根据文件名计算哈希值,然后根据此哈希值选择颜色,并返回样式命令。
然后您的PRINTF()
宏将变为:
#define PRINTF(...) printf(calculateStyle(__FILE__)); printf(__VA_ARGS__); PRINT_NORMAL
当然,你不能保证使用散列的独特颜色,但它至少可以避免你在某处保留使用过的颜色列表,并将这些模糊的命令保存在源文件中(很好地将它们隐藏在一个{ {1}}模块)。