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.