理解宏扩展规则的问题

时间:2011-03-22 16:03:24

标签: c macros

作为初学者,我很难理解以下陈述

  

a)如果在a的替换列表中   函数式宏,一个参数是   紧接在之前或之后   ##预处理令牌,参数被相应的替换   参数的预处理令牌   序列;

     

b)对象和对象都是   类似函数的宏调用,   在更换清单之前   重新审查更多的宏名称   替换,每个##的实例   替换中的预处理令牌   列表(不是参数)被删除   和前面的预处理令牌   与以下内容连接在一起   预处理令牌

请您帮助我用一些简单的例子来理解上述陈述

3 个答案:

答案 0 :(得分:3)

<强>宏

#define MAKE_EVENT_HANDLER(x)  void On##x(void) {

<强>用法

MAKE_EVENT_HANDLER(MouseClick)
   /* Do stuff */
} // End of function

如何扩展

void OnMouseClick(void) { /* Do stuff */ }

答案 1 :(得分:1)

前段时间我写了几篇关于预处理器的文章。它们既包含技术内容,也包含民间传说。第2部分介绍#和##运算符。

第1部分:Basics of using the preprocessor

第2部分:Advanced preprocessor tips and tricks

答案 2 :(得分:0)

维基百科有一个很好的例证 - &gt; token pasting