#define中的#、## && #@
来源:百度文库 编辑:神马文学网 时间:2024/07/02 16:53:36
前些一段时间在看WinCE的Code时发现在宏定义中有用到##,如下所示
#define GPEBLT_FUNCNAME(basename) (SCODE (GPE::*)(struct GPEBltParms *))&GPE::##basename
在#define中,标准只定义了#和##两种操作。#用来把参数转换成字符串,##则用来连接两个前后两个参数,把它们变成一个字符串。
1
#define ToString(a) #a
2
ToString( A b Cd ); //A b Cd
3
ToString( A\n b Cd ); //A
4
// b Cd
5
ToString( A\ n b Cd ); //A n b Cd
6![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
7![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
8
#define ConCat(x, y) x ## y
9
ConCat( "ABC", "DEF" );
10
ConCat( 123, 4);
11
ConCat( 123.0, 5);
12
//=================================
13
// Cat( 123.0, 5.5);
14
// Cat( 'a', 'b' );
15
// Cat( "ABC", 'd' );
16
// Cat( 'a', 1234 );
17
// Cat( "ABC", 1234 );
18
//===== above can't compile =======
19![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
20![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
另外,在网上搜到还有一种用法:#@,把参数转换成字符
1
#define ToChar(a) #@a
2
ToChar(a); // a
3
ToChar(ab); // b
4
ToChar(abc); // c
5
ToChar(abcd); // d
6
//ToChar(abcde); // too many characters in constant
7
ToChar(1.); // .
这个没在标准上看到。上述测试是在VS studio环境下做的。不知道GCC中是否有同样的用法。
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
在#define中,标准只定义了#和##两种操作。#用来把参数转换成字符串,##则用来连接两个前后两个参数,把它们变成一个字符串。
1
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
2
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
3
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
4
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
5
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
6
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
7
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
8
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
9
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
10
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
11
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
12
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
13
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
14
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
15
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
16
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
17
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
18
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
19
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
20
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
另外,在网上搜到还有一种用法:#@,把参数转换成字符
1
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
2
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
3
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
4
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
5
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
6
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
7
![](http://image14.360doc.cn/DownloadImg/2010/09/0316/5031398_1.gif)
这个没在标准上看到。上述测试是在VS studio环境下做的。不知道GCC中是否有同样的用法。
#define中的#、## && #@
#define 的特别用法
typedef与#define
#define 的特别用法
关于#define的初级问题
typedef和define详细区别
你也许不知道的#define用法
#define后面只跟一个“参数”
#define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)
How to define a DataGrid using ListView in WPF?
The middle class will define politics in Latin America
typedef的用法及与define的区别总结
#pragma once 和 #ifndef #define …#endif 有什么不同?
文革中的
人生中的
生命中的
宋词中的
生命中的
传说中的丽江,传说中的古城
富贵中的辉煌 贫穷中的体面
富贵中的辉煌 贫穷中的体面a
平凡中的爱情、奢望平凡中的幸福
“问题中的哲学”与“哲学中的问题”
电影中的性文化:惊世骇俗中的美丽