最近看com相关的资料,看到CCmdTarget实现com接口的时候,去读了一些宏的定义,在afxdisp.h头文件中
#define BEGIN_INTERFACE_PART(localClass, baseClass) \
class X##localClass : public baseClass \
本来这个宏定义很容易理解的,但是这里多出个X##,我真没见过这种用法,不晓得它是什么用意。
后来问了几个朋友也都不知道。
你知道么?
也许你也不知道~呵呵,最后我还是找到了相关的资料,解读了这个define,还顺便认识了另外两个不常用的define
#define Conn(x,y) x##y
#define ToChar(x) #@x#define ToString(x) #x
x##y表示什么?表示x连接y,举例说:
int n = Conn(123,456); 结果就是n=123456;
char* str = Conn("asdf", "adf")结果就是 str = "asdfadf";
怎么样,很神奇吧
再来看#@x,其实就是给x加上单引号,结果返回是一个const char。举例说:
char a = ToChar(1);结果就是a='1';
做个越界试验char a = ToChar(123);结果是a='3';
但是如果你的参数超过四个字符,编译器就给给你报错了!error C2015: too many characters in constant :P
最后看看#x,估计你也明白了,他是给x加双引号
char* str = ToString(123132);就成了str="123132";
最后留几个小试验给大家去测测:
#define Dec(x,y) (x-y)
int n = Dec( A(123,1), 1230);
n = Conn(123, Conn(123,332) );
char* str = A("12", ToString( Dec(3,1));
你也许不知道的#define用法
原创
©著作权归作者所有:来自51CTO博客作者doloveme的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:理解Android系统的进程间通信原理(一)----RPC中的代理模式
下一篇:android中activity设置标志FLAG_ACTIVITY_NEW_TASK,FLAG_ACTIVITY_CLEAR_TOP详解和taskAffini
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
#HarmonyOS NEXT体验官# 鸿蒙next 数据持久化 你不知道的事情数据 持久化 首选项
-
你也许不知道的 JavaScript 高级函数go java web eclipse aop
-
你不知道的 JavaScript - “this”
JavaScript 里的 this 到底指得是什么?很多人都会告诉你 this 指的是当前对象。这样理解对么?在大多数情况下确实没错。比如我们经常
JavaScript prototype HTML ViewUI 作用域