gpt4 book ai didi

c++ - 我的多行宏有什么问题?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:04:27 25 4
gpt4 key购买 nike

我有一个函数 mainFunc这需要多次调用另一个函数 process . process有很多争论但是mainfunc在不同的调用中只改变其中的两个/而不是另一个它传递在调用 process 之前定义和分配的局部变量.所以我写了一个简单的宏,它在对 process 的调用中替换了局部变量。 :

#define DO_PROCESS(pred1, est1)     \
do \
{ \
process(pred1, est1, arg1, arg2, arg3); \
++id; \
delete est1; \
} while(0)

arg1 , arg2 , arg3mainFunc 中的局部变量,所以我希望我的宏将只使用它们。在 mainFunc 中:

int arg1, arg2, arg3;
arg1 = AssignFirst();
...
Pred* pred;
Est* est;
int estArg;
int predArg;

pred = new Pred(predArg);
DO_PROCESS(pred, new Est(estArg));
delete pred;

pred = new Pred(predArg2);
DO_PROCESS(pred, new Est(estArg2));
delete pred;

pred = new Pred(predArg3);
DO_PROCESS(pred, new Est(estArg3));
delete pred;
....

但是,在宏的最后一行中,我得到 C2059 和 C2143 错误,分别指向右花括号和分号。

这是怎么回事??

最佳答案

最可能的原因是宏定义中的一个反斜杠后有多余的空格。确保 \ 确实是一行中的最后一个字符。

哦,你的代码会泄漏内存,因为 est1 在你的宏定义中计算了两次 - 它扩展为 process(pred1, new Est(...), ... ) 然后 delete new Est(...),这不是你的意思。在 process 调用之前添加类似 Est *e = est1; 的内容,并将宏中剩余的 est1 替换为 e 来避免这个问题。

关于c++ - 我的多行宏有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4116724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com