C Preprocesador para dividir "int x" en int & x

Necesito poder obtener lo siguiente:

#define MY_MACRO(PARAM1,PARAM2) \
 MY_OTHER_MACRO(TYPENAME_OF(PARAM1),PARAMNAME_OF(PARAM1));\
 MY_OTHER_MACRO(TYPENAME_OF(PARAM2),PARAMNAME_OF(PARAM2));\

causar

MY_MACRO(int x,char *z) 

compilar como

MY_OTHER_MACRO(int,x);
MY_OTHER_MACRO(char*,z);

o no sería el fin del mundo si se compilara como:

MY_OTHER_MACRO(int,x);
MY_OTHER_MACRO(char,*z);

o incluso esto también estaría bien: (puedo codificar MY_OTHER_MACRO para que funcione con cualquiera de los resultados)

MY_OTHER_MACRO(int,x);
MY_OTHER_MACRO(char,z);

alternativamente, si hay alguna forma de contar los tokens que están separados por espacios en blanco (y suponiendo que "*" es un token separado, también puedo trabajar con eso, por ejemplo 2 vs 3), los tokens están separados por comas, hasta donde Lo sé. ¿Hay alguna forma de usar otro personaje?

Respuestas a la pregunta(2)

Su respuesta a la pregunta