У меня есть функция переменного аргумента, которая печатает сообщения об ошибках в моем приложении, код которого приведен ниже:
void error(char *format,...)
{ va_list args;
printf("Error: ");
va_start(args, format);
vfprintf(stderr, format, args);
va_end(args);
printf("\n");
abort();
}
Эта функция используется в следующих случаях:
error("invalid image width %d and image height %d in GIF file %s",wid,hei,name);
Функция error()
вызывается из разных мест с разными аргументами (функция переменного аргумента).
Функциональный подход работает отлично.
Теперь, если мне нужно преобразовать эту функцию в макрос, как мне это сделать? Я пытался сделать это как:
#define error(format) {va_list args;\
printf("Error: ");\
va_start(args, format);\
vfprintf(stderr, format, args);\
va_end(args);\
printf("\n"); abort()}
Но это не выводит аргументы правильно.
Что не так в определении макроса выше?
Что за исправление?