У меня есть некоторый отладочный код, который выглядит следующим образом:
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
#define AT __FILE__ ":" TOSTRING(__LINE__)
void __my_error(const char*loc, const char *fmt, ...);
#define my_error(fmt, ...) __my_error(AT, fmt, ##__VA_ARGS__)
Последний макрос используется, чтобы я мог вставить местоположение в выходные данные отладки относительно того, где произошла ошибка.Однако, когда я вызываю функцию следующим образом:
my_error("Uh oh!");
Я бы хотел бы мой код C99, поэтому я обнаружил, что при компиляции получаю следующую ошибку:
error: ISO C99 requires rest arguments to be used
Я знаю, что могу решить эту проблему, изменив вызов на
my_error("Uh oh!", NULL);
Но есть ли способ сделать этот вид менее уродливым?Спасибо!