你也许不知道的#define用法 [转载]
来源:互联网 发布:网络数据 编辑:程序博客网 时间:2024/04/30 10:08
你也许不知道的#define用法
最近看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 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用法 [转载]
- [转载]你也许不知道的#define用法
- 你也许不知道的#define用法
- 你也许不知道的#define用法
- 你也许不知道的#define用法
- 一些你也许不知道的#define 用法
- 你也许不知道的真实历史
- 【转载】35 个你也许不知道的 Google 开源项目
- java里面一些你也许还不知道的东西
- 也许你还不知道的类型转换方法
- sp_executesql和execute你也许不知道的
- 也许你不知道的c#基本数据类型及其默认值
- 你也许不知道的批量更新语句
- 10个你也许不知道的Ubuntu技巧
- 也许你不知道的c#基本数据类型及其默认值
- 10个你也许不知道的Ubuntu技巧
- 关于构造函数,也许你不知道的
- 10个你也许不知道的Ubuntu技巧
- Maven学习笔记(1) 了解什么是Maven
- 阅读下面代码,程序列举了3种二维数组作为参数传递的方法:[转载]
- pdf文件如何转换为word文件 [转载]
- 第一次使用 ubuntu感觉很好
- 悼念袁可嘉
- 你也许不知道的#define用法 [转载]
- WinCE下驱动开发入门记录 [转载]
- Linux USB驱动框架分析(一)(转)
- C++中字符串与整型浮点型间的转换(转载)
- gcc编译选项 (转载)
- pdf文档转化为doc文档 (转载)
- new和malloc的区别[转载]
- 总结下new,原来一直用的,但是有时候经常忘,还是总结下的好![转载]
- Eclipse快捷键大全(转载)