##(两个井号)和#(一个井号)都是什么意思

C and C++ 2008-09-23 21:18:27 阅读1106 评论0   字号:大小 订阅

连接符 ##(两个井号)

不知道什么符 #(一个井号)

## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。具体的定义在编译原理里有详尽的解释

#符是把传递过来的参数当成字符串进行替代。

假设程序中已经定义了这样一个带参数的宏:

#define PRINT( n ) printf( "token" #n " = %d", token##n )

同时又定义了二个整形变量:

int token9 = 9;

现在在主程序中以下面的方式调用这个宏:

PRINT( 9 );

那么在编译时,上面的这句话被扩展为:

printf( "token" "9" " = %d", token9 );

注意到在这个例子中,PRINT(9);中的这个”9”被原封不动的当成了一个字符串,与”token”连接在了一起,从而成为了token9。而#n也被”9”所替代。

可想而知,上面程序运行的结果就是在屏幕上打印出token9=9

还有点不明白?!

再来一个例子:

#define PRINT( n ) printf( "token" #n " = %d", game##n )

int token9 = 9;

int game9 = 99;

调用:

PRINT(9);

屏幕上打印出:

token9 = 99; :)~

##(两个井号)和#(一个井号)都是什么意思C and C++ 2008-09-23 21:18:27 阅读1106 评论0 字号:大中小 订阅 .相关推荐

  1. 一般写入的两个IMEI号和一个MEID号,输入*#06#*后显示遗漏一个IMEI号。

    在override/vendor/mediatek/proprietary/packages/apps/Dialer/java/com/android/dialer/dialpadview/Speci ...

  2. [C++]##(两个井号)和#(一个井号)都是什么意思

    文章轉自:http://thatax.blog.163.com/blog/static/20892680200882391827116/ 版權歸原作者! 连接符 ##(两个井号) 不知道什么符 #(一 ...

  3. C语言(C++语言)中##(两个井号)和#(一个井号)用法[转]

    C语言(C++语言)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念).下面对常遇到的宏的使用问题做了简单总结. 关 于#和## 在C语言的宏中,#的功能是将其后面的宏参数进 ...

  4. ##(两个井号)和#(一个井号)都是什么意思

    连接符 ##(两个井号) 不知道什么符 #(一个井号) ## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串.但它不可以是第一个或者最后一个子 ...

  5. python一个等号和两个等号_有车以后视频号商业方法论:我们用视频号再造一个公众号...

    近期行业内探讨自己做视频号内容定位时,一直有两种声音作为大家思考未来视频号潜力的前提和指引方向. 第一 ,抖音已经完成了体验传递,情绪表达,趣味探索的占领:留给视频号的空间只有价值表达,观点传递,圈子 ...

  6. c语言输入字符串以井号结束,C语言中两个井号“##”和一个井号#的使用方法[转]...

    最近看了一些dsp的库函数,发现了一些使用##的宏定义,以前没有用到过,后来差了些资料,学习了##的用法. 例如下面的语句: #define  CSL_FMK(PER_REG_FIELD, val) ...

  7. C/C++中单井号与双井号的使用

    C/C++中单井号与双井号的使用 作者:delnabla 日期:2009-12-24 字体大小: 小 中 大 在宏定义中经常会用到#和## 单井号(#) 把传递过来的参数当成字符串进行替代 如下示例: ...

  8. C语言中 井号#、双井号##

    在 C 语言中,井号 "#" 是一个预处理器指令的符号,用于在编译之前处理代码.预处理器指令以 "#" 开始,以换行符结束. 常见的预处理器指令包括: #inc ...

  9. C语言宏与单井号(#)和双井号(##)

    C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译器概念(而非运行期概念).下面对常遇到的宏的使用问题做了简单总结. 关于#和## 在C语言的宏中,#的功能是将其后面的宏参数进行字符串 ...

最新文章

  1. python使用socket实现协议TCP长连接框架
  2. 微博爬虫“免登录”技巧详解及Java实现
  3. (转)zabbix3.4使用percona-monitoring-plugins监控mysql
  4. 阿里技术专家详解 DDD 系列- Domain Primitive
  5. 【java】SpringBoot新特性 节省百分之95﹪内存占用
  6. 解决 【git checkout -b dev origin/dev】报错的问题
  7. python类方法_Python类方法
  8. Shell脚本编程之(一)Shell脚本简介
  9. 10本Java架构师必读书籍
  10. ANSYS——模态分析的载荷施加问题以及约束的施加问题
  11. M3DGIS三维数字沙盘开发教程第51课可视化交互大数据地理信息系统开发教程第51课
  12. 【自动驾驶传感器融合系列】01自动驾驶中常用的传感器
  13. Python 集合(set)类型的操作——并交差
  14. python输入直角三角形两条直角边、输出斜边长_python直角三角形的两个直角边、求斜边_直角三角形斜边公式计算器 两个直角边边长的平方加起来等......
  15. 服务器打开显示选择键盘布局,更改服务器上的TTY键盘布局?
  16. JS 面试问题: 手写 new
  17. Mackevision 发布 2016 年回顾与展望
  18. 求部门最高工资(Mysql多表查询)
  19. 安装ktorrent amule 下载edk2 迅雷文件
  20. 减肥的第5天 (想吃——冰淇淋)

热门文章

  1. 起步,停车——走好你的IT运维管理之路
  2. 教你认识H3C的设备
  3. input标签加disabled属性后无法获得其value值
  4. nyoj971爬行的蚂蚁
  5. [LeetCode] 1091. Shortest Path in Binary Matrix
  6. MAPREDUCE的实战案例
  7. Google Dremel 原理 - 如何能3秒分析1PB
  8. Redis 教程基于win10:1介绍
  9. STM32 USART1 USART2 UASRT3 UART4 UART5串口通信测试程序
  10. 详解CUDA核函数及运行时参数