C++/C宏定义中## 连接符与# 符的含义(转自http://blog.163.com/wshyao@126/blog/static/1070451420081018103237836/)
2009-12-21 10:22
337 查看
## 连接符与# 符
## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。具体的定义在编译原理里有详尽的解释,但不知道也无所谓。同时值得注意的是#符是把传递过来的参数当成字符串进行替代。下面来看看它们是怎样工作的。这是MSDN上的一个例子。
假设程序中已经定义了这样一个带参数的宏:
#define paster( n ) printf( "token" #n " = %d", token##n )
同时又定义了一个整形变量:
int token9 = 9;
现在在主程序中以下面的方式调用这个宏:
paster( 9 );
那么在编译时,上面的这句话被扩展为:
printf( "token" "9" " = %d", token9 );
注意到在这个例子中,paster(9);中的这个”9”被原封不动的当成了一个字符串,与”token”连接在了一起,从而成为了token9。而#n也被”9”所替代。
可想而知,上面程序运行的结果就是在屏幕上打印出token9=9
## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。具体的定义在编译原理里有详尽的解释,但不知道也无所谓。同时值得注意的是#符是把传递过来的参数当成字符串进行替代。下面来看看它们是怎样工作的。这是MSDN上的一个例子。
假设程序中已经定义了这样一个带参数的宏:
#define paster( n ) printf( "token" #n " = %d", token##n )
同时又定义了一个整形变量:
int token9 = 9;
现在在主程序中以下面的方式调用这个宏:
paster( 9 );
那么在编译时,上面的这句话被扩展为:
printf( "token" "9" " = %d", token9 );
注意到在这个例子中,paster(9);中的这个”9”被原封不动的当成了一个字符串,与”token”连接在了一起,从而成为了token9。而#n也被”9”所替代。
可想而知,上面程序运行的结果就是在屏幕上打印出token9=9
相关文章推荐
- 从左到右的流水灯http://blog.163.com/paulucy@126/blog/static/949302822009112410354855/
- C++/C宏定义中## 连接符与# 符的含义
- java垃圾回收器http://blog.163.com/moutei@126/blog/static/112515561200942024256658/
- 我的博客 http://aofengblog.blog.163.com/
- 虽然偶是个程序员,不过不想维护多个博客,所以请访问http://dreamisx.blog.163.com/
- os内存管理之页式存储管理 http://blog.163.com/he_haoyi/blog/static/118698376200991542415238/
- 我的blog :http://blog.163.com/zhx_nj
- Android 数据存储之四ContentProvider(转http://blog.163.com/sikaodelang@126/blog/static/164107300201051124810430/)
- 【Windows/Linux】Makefile知识点整理 http://blog.163.com/niwei_258/blog/static/106284882010101485242891/
- 25、静态查找表(顺序表、索引顺序表、静态树表、折半查找) http://blog.163.com/zhoumhan_0351/blog/static/39954227200993093110226
- C++/C宏定义中## 连接符与# 符的含义
- IOS绘图详解(http://blog.163.com/wkyuyang_001/blog/static/10802122820133190545227/)
- DELPHI的开源控件集(转自http://xieyunc.blog.163.com/)
- C,C++经典笔试题(答案)转自:http://blog.163.com/jianhuali0118@126/blog/static/377499702008230104125229/
- 任意长整数的四则运算(C++)(http://blog.163.com/zhongguojiliangfgg@126/blog/static/48510017200992875315870/)
- 此处发的很多文章是旧的,可以去http://chulianggao.blog.163.com/查阅
- http://blog.163.com/zhaoyanping_1125/blog/static/20132915320120711355117/
- C++/C宏定义中## 连接符与# 符的含义
- 诸多打印(来源http://blog.163.com/to_yht/blog/static/12272577420097413530996/)
- 此网站安全证书有问题(转http://blog.163.com/whhlcj@126/blog/static/387028772012111853842496/)