Я пытаюсь написать макрос отладочной печати, который будет печатать имя функции с возможностью включения формата/varargs для печати параметров.c Макро с несколькими необязательными аргументами
Я установил свои модули так, чтобы каждый из них имел цвет печати, добавляя переменную стиля к отдельным модулям и используя ее в моем макросе печати.
Рабочая печать макрос выглядит следующим образом
//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);
}
Я могу найти макрос, который почти выполняет это, проблема в том, что он требует от вас мини mally отправить пустую строку формата.
#define PRINT_FN(fmt, ...) printf("%s" STYLE_UNDERLINE "%s(" fmt ")" STYLE_NORMAL, \
style, __func__, ##__VA_ARGS__)
Есть ли способ, который я также могу сделать параметром fmt необязательным?
Я просто хотел бы назвать его как PRINT_FN(), а не PRINT_FN ("") – user3817250
Не имеет смысла. Он не будет печатать вам новую строку. –
@ н.м. Я не могу понять ваш комментарий. Вы предлагаете, чтобы все заявления для печати требовали новой строки? В конце я добавил новую строку к моему макросу PRINT_FN, но, конечно, не к PRINTF. – user3817250