Macro y función con el mismo nombre.

Tengo el siguiente código

#define myfunc(a,b) myfunc(do_a(a), do_b(b))

void myfunc(int a, int b)
{
  do_blah(a,b);
}
int main()
{
    int x = 6, y = 7;
    myfunc(x,y);

    return 0;
}

Quiero que el preprocesador amplíe la función myfunc solo al llamar. El código requerido después del preprocesamiento se ve así:

void myfunc(int a, int b)
{
  do_blah(a,b);
}
int main()
{
    int x = 6, y = 7;
    myfunc(do_a(x),do_b(y));

    return 0;
}

El problema es que la definición de la función se expande también así.

void myfunc(do_a(int a), do_b(int b))
{
  do_blah(a,b);
}

¿Hay alguna forma de hacer que la macro se expanda solo si estamos expandiendo una llamada de función? Intenté muchas soluciones y parece imposible, pero espero que alguien haya visto una situación como esta ...

NOTA: por favor, no me diga que cambie el nombre de la macro o los nombres de funciones: D

Update1: Gracias por su ayuda. Pero solo puedo cambiar la definición de la macro, no puedo cambiar su posición y no puedo cambiar la implementación de la función.

Respuestas a la pregunta(5)

Su respuesta a la pregunta