Macro e função com o mesmo nome

eu tenho o seguinte 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;
}

Eu quero que o pré-processador expanda a função myfunc apenas na chamada. O código requerido após o pré-processamento é semelhante ao seguinte:

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;
}

O problema é que a definição de função é expandida também assim

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

Existe alguma maneira de fazer macro expande apenas se estamos expandindo uma chamada de função? Eu tentei muitas soluções, e parece impossível, mas espero que alguém tenha visto uma situação como esta.

NOTA: por favor, não me diga para renomear os nomes das macro ou funções: D

Update1: Obrigado por sua ajuda. Mas só posso alterar a definição da macro, não posso alterar sua posição e não posso alterar a implementação da função.

questionAnswers(5)

yourAnswerToTheQuestion