У меня есть следующий код
#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;
}
Я хочу, чтобы препроцессор расширял функцию myfunc только при вызове. Требуемый код после предварительной обработки выглядит так:
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;
}
Проблема в том, что определение функции также расширяется
void myfunc(do_a(int a), do_b(int b))
{
do_blah(a,b);
}
Есть ли способ сделать макрокомпенсацию только в том случае, если мы расширяем вызов функции?
Я перепробовал много решений, и это кажется невозможным, но я надеюсь, что кто-то видел такую ситуацию ..
ПРИМЕЧАНИЕ: пожалуйста, не говорите мне переименовать имена макросов или функций: D
Update1:
Спасибо за помощь. Но я могу только изменить определение макроса, я не могу изменить его положение и не могу изменить реализацию функции.