предупреждение: твърде много аргументи за формат

#include<stdio.h>
#include<errno.h>
#include<error.h>
#include<stdlib.h>

#define clean_errno() (errno == 0 ? "None" : strerror(errno))
#define DEBUG_ERROR(M,...) fprintf(stderr, "[ERROR] (%s:%d: (error: %s)) M \n", __FILE__, __LINE__, clean_errno(),##__VA_ARGS__)

int main()
{
   int test =10;
   DEBUG_ERROR("Test variable %s = %d.\n","test",test);
   return 0;
}

Някакви идеи как да коригирате следното предупреждение с макроса за отстраняване на грешки...

warn.c:12:4: предупреждение: твърде много аргументи за формат [-Wformat-extra-args]


person m4n07    schedule 24.11.2014    source източник
comment
Имайте предвид, че вашият макрос използва gcc разширение конструкцията , ##.   -  person Jens Gustedt    schedule 24.11.2014


Отговори (1)


Вашият макрос трябва да бъде:

#define DEBUG_ERROR(M,...) fprintf(stderr, "[ERROR] (%s:%d: (error: %s)) " M " \n", __FILE__, __LINE__, clean_errno(),##__VA_ARGS__)

Имайте предвид, че M сега не е в кавички.

person Bill Lynch    schedule 24.11.2014