I found a way only using the processor. The idea came from this answer https://stackoverflow.com/a/11763277/6082851 The idea is to define a bunch of macros that void the arguments, one macro per possible number of arguments. With the use of __VA_ARGS__, the correct macro can be chosen depending on the number of arguments. Sadly, i didn't found a way to make it recursive so that a limited number of macros can be used for an arbitrary number of arguments, the only way i found was to define a macro for each possible number of arguments. But it can be expanded to an arbitrary amount.
#include <stdio.h>
#ifndef DEBUG
  #define DEBUG 1
#endif
#if DEBUG
  #define DEBUG_PRINT(...) fprintf(stderr, __VA_ARGS__)
#else
  //GET_MACRO will get the 6. argument
  #define GET_MACRO(a,b,c,d,e,f,...) f
  //Macros that void a number of arguments
  #define SET_VOID0()  
  #define SET_VOID1(a)          (void)a;
  #define SET_VOID2(a,b)        (void)a;(void)b;
  #define SET_VOID3(a,b,c)      (void)a;(void)b;(void)c;
  #define SET_VOID4(a,b,c,d)    (void)a;(void)b;(void)c;(void)d;
  #define SET_VOID5(a,b,c,d,e)  (void)a;(void)b;(void)c;(void)d;(void)e;
  
  //Void all arguments to avoid compiler warnings.
  //SET_VOID5 is used when there are 5 arguments used, SET_VOID4 when 4 are used, ...
  #define DEBUG_PRINT(...)     GET_MACRO(__VA_ARGS__, SET_VOID5, SET_VOID4, SET_VOID3, SET_VOID2, SET_VOID1, SET_VOID0)(__VA_ARGS__)
#endif
int main(void)
  {
    int foo=5;
    int bar=3;
    DEBUG_PRINT("Foo %i Bar %i\n",foo,bar);
    return 0;
  }