c基于源文件的打印颜色宏

时间:2014-09-09 13:28:20

标签: c macros console printf

我想知道是否有人想出了一个聪明的宏,它会根据哪个源文件调用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语句?

1 个答案:

答案 0 :(得分:1)

在(新)calculateStyle()模块中创建一个函数print.c,它根据文件名计算哈希值,然后根据此哈希值选择颜色,并返回样式命令。

然后您的PRINTF()宏将变为:

#define PRINTF(...) printf(calculateStyle(__FILE__)); printf(__VA_ARGS__); PRINT_NORMAL

当然,你不能保证使用散列的独特颜色,但它至少可以避免你在某处保留使用过的颜色列表,并将这些模糊的命令保存在源文件中(很好地将它们隐藏在一个{ {1}}模块)。