【发布时间】:2020-02-09 06:19:51
【问题描述】:
如何在 C/C++ 宏中使用包含点(成员访问运算符)的参数?
例子:
#define M(obj,y) obj.y##x
struct S { struct {int x;} c; int x; };
S s;
s.c.x = 1;
s.x = 2;
M(s,) // works, 2 (resolves to s.x)
M(s,c.) // error: pasting formed '.x', an invalid preprocessing token
如何让M(s,c.) 解析为s.c.x?
感谢您的帮助!
【问题讨论】:
-
您使用的是 C 还是 C++?如果您使用的是 C++,我建议您放弃宏并制作模板函数。
-
宏往往会使代码更难阅读、理解和维护。尤其是像您想要制作的宏。请尽量避开它们。
-
感谢您的 cmets!不过,有可能吗?
-
你可能需要另一个间接层,就像使用 concat 宏所做的那样。我不是宏专业人士,所以它可能无济于事。
-
.的两侧(或两侧)可以有空格。
标签: c++ c arguments c-preprocessor member-access