gpt4 book ai didi

链接的宏调用。括号中的参数有不同的处理方式吗?

转载 作者:行者123 更新时间:2023-11-30 19:48:52 25 4
gpt4 key购买 nike

#define A(p1, p2, p3, p4) foo(p1, p2, p3, p4)
#define B(s) A(p1, p2, (s), p4)

这里,A() 是一个宏绑定(bind),旨在提高可移植性,如果我们需要调用 bar(p1, p2, p3, p4) 并且不想重写整个代码库。

现在我尝试定义 B() 以使写作更容易,因为 p1、p2 和 p4 通常具有相同的值。然而,除非我删除 s 周围的括号,否则这不起作用。 这是怎么回事?我要传递什么给 A?

<小时/>

事实证明:

#define foo(p1, p2, p3, p4) p1 ## p2 ## p3 ## p4()

我不确定 p4 是在哪里定义的,但我只有一个有效值。因此,当我传递 (s) 而不是 s 时,我得到的是 p1p2 而不是 p1p2sp4

最佳答案

So I am passing "(" + + ")"? Right! And then A (which actually concatinates it's inputs by simple p1 ## p2 ## p3 ## p4) actually stops before the third argument

是的,然后 foo 产生

p1 ## p2 ## ( s ) ## p4

并将括号分别粘贴到 p4 中。 p1 ## p2 产生无效 token ,因此整个事情被拒绝。

对于标记粘贴,括号是一个很大的禁忌。

关于链接的宏调用。括号中的参数有不同的处理方式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16462095/

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