我正在尝试编写一个调试打印宏,该宏将打印函数名称,并具有包含格式/可变参数的选项,以便打印参数。
我已经设置了我的模块,使每个模块都有自己的打印颜色,通过为各个模块添加样式变量并在我的打印宏中使用它来实现。
以下是有效的打印宏:
//myprint.h
...
#define STYLE_UNDERLINE "\033[4m"
#define STYLE_NORMAL "\033[0m"
#define STYLE_BLUE "\033[0;34m"
... // more colo(u)rs here
#define PRINTF(fmt, ...) printf("%s" fmt STYLE_NORMAL, style, ##__VA_ARGS__)
...
使用方法:
//myfile.c
...
static char * style = STYLE_BLUE;
void myFunc(int i) {
PRINTF("String with no params\n");
PRINTF("i value %d\n", i);
}
我希望你能用一个 PRINT_FN 宏来实现类似的功能,使用方法如下:
//myfile.c
...
void myFunc(int i) {
PRINT_FN(); // just print the function name
// equivalent to
PRINTF("%s%s()", STYLE_UNDERLINE, __func__);
PRINT_FN("%d", i) // print the function name and parameter
// equivalent to
PRINTF("%s%s(%d)", STYLE_UNDERLINE, __func__, i);
}
我可以设计一个几乎可以实现这一目的的宏,问题在于需要您最少发送一个空格式字符串。
#define PRINT_FN(fmt, ...) printf("%s" STYLE_UNDERLINE "%s(" fmt ")" STYLE_NORMAL, \
style, __func__, ##__VA_ARGS__)
有没有办法让fmt参数也变成可选的?