struct ms {
uint64_t a;
uint64_t b;
uint64_t c;
uint64_t d;
};
#define MS_INC(ms, name) ms->##name++
...
struct ms m;
MS_INC(&m, a);
这给我一个错误:“粘贴“ a”和“ ++”没有给出有效的预处理令牌”
是否不允许粘贴“->”或“。” ?
答案 0 :(得分:2)
这给我一个错误:“粘贴“ a”和“ ++”没有给出有效的预处理令牌”
是的。而且C不允许这样使用令牌粘贴操作符。
您似乎想生成以下形式的表达式
allOf
请注意,它由四个令牌组成:ms->name++
,ms
,->
和name
。如果您执行令牌粘贴操作,其中与++
对应的宏参数实际上具有标识符形式,例如name
,那么结果将是单个令牌Mark
(介于另外两个)。 ->Mark
不是有效的令牌。
尽管空格通常会分离标记,但大多数标记之间并不需要。另一方面,令牌之间总是 allowed ,因此您可以这样编写上面的表达式,而不是:
->Mark
或类似这样:
ms -> name ++
或类似这样:
ms->name ++
据我所知,您的宏绝对不需要令牌粘贴。只需移除ms /* look, Ma, a comment! */
->name
++
。