estoy trabajando en una macro llamada,macros variadic con cero argumentos
#define CALL(f,...) FN(f)->call((ref(new LinkedList()), __VA_ARGS__))
que cuando se llama,
CALL(print,2,3,4,5);
añade 2 3 4 5 de la lista enlazada (, está sobrecargado para hacerlo) y las llamadas se imprimen, lo que espera una lista vinculada que funcione como se espera, aunque haya algunas llamadas que no requieren argumentos,
CALL(HeapSize);
Todavía toma una lista vinculada pero una vacía, arriba no funciona, ¿estoy tratando de encontrar una macro que funcione con cualquiera de los dos estilos?
EDIT: Digging throug docs gcc he encontrado que la adición de ## antes de VA_ARGS elimina el, cuando no hay argumentos, pero con eso no puedo macros nido,
CALL(print,CALL(HeadSize));
esto hace que la llamada no se define de error Cómo siempre, si separo las llamadas funciona
Puede tener el delegado 'CALL' en diferentes macros dependiendo de la cantidad de argumentos que se pasan. Demostré cómo hacer esto [en una respuesta a otra pregunta] (http://stackoverflow.com/questions/5355241/generating-function-declaration-using-a-macro-iteration/5355946#5355946). Esto no requiere ningún hackeo específico de implementación. –
también vea http://stackoverflow.com/questions/5588855/standard-alternative-to-gccs-va-args-trick –