предупреждение: слишком много аргументов для формата

#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