Makro i funkcja o tej samej nazwie

Mam następujący kod

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

Chcę, aby preprocesor rozwinął funkcję myfunc tylko podczas wywoływania. Wymagany kod po wstępnym przetworzeniu wygląda tak:

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

Problem polega na tym, że definicja funkcji jest również rozszerzona

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

Czy jest jakiś sposób, aby makro rozwijało się tylko wtedy, gdy rozwijamy wywołanie funkcji? Próbowałem wielu rozwiązań i wydaje się to niemożliwe, ale mam nadzieję, że ktoś zobaczył taką sytuację ...

UWAGA: proszę nie informować mnie o zmianie nazwy makra lub nazwy funkcji: D

Aktualizacja1: Dziękuję za pomoc. Ale mogę tylko zmienić definicję makra, nie mogę zmienić jego pozycji i nie mogę zmienić implementacji funkcji.

questionAnswers(5)

yourAnswerToTheQuestion