我有以下代码
#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
更新1:
谢谢你的帮助。但我只能改变宏的定义,不能改变它的位置,也不能改变函数的实现。