举例一个代码,看不懂没关系,主要是理解标题中##的含义。
QUERYINTERFACE(ITableFrameSink,Guid,dwQueryVer);//查询接口
#define QUERY_ME_INTERFACE(Interface) \
((Interface *)QueryInterface(IID_##Interface,VER_##Interface))什么意思?
这个在于平时的积累,没遇到不代表没人用,高手的代码中很多东西看着都很新鲜。
如果这样使用如标题定义的宏:
XNAME(8)
则会被展开成这样:
x8
##就是个粘合剂,将前后两部分组合在一块。
#define MAXINE(x,n) x##n
cout<<MAXINE(1,8)<<endl;
cout<<MAXINE(2,9)<<endl;
cout<<MAXINE(3,7)<<endl;
看明白没?