博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++/C宏定义中## 连接符与# 符的含义
阅读量:6310 次
发布时间:2019-06-22

本文共 1003 字,大约阅读时间需要 3 分钟。

转自:

1.

2.

## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可

以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。具体的定义在编译原理里有详尽的

解释,但不知道也无所谓。同时值得注意的是#连接符是把传递过来的参数当成字符串进行替代。下面来看看它们是怎样工作

的。这是MSDN上的一个例子。

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

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

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

int token9 = 9;

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

paster( 9 );

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

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

详细解说:#n 相当于 “n”, token##n 相当于token9,须注意##不能当成两个#,他们意义是不同的。

注意到在这个例子中,paster(9);中的这个”9”被原封不动的当成了一个字符串,与”token”连接在了一起,从而成为了

token9。而#n也被”9”所替代。

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

注意##和#的使用场合,不能乱用

# —— 字符串

##——连接两个参数

实例:

 
#include
using namespace std;
 
#define TEST(pid) (cout<
<
#define TEST2(p) (cout<<#p<
 
int _tmain(int argc,TCHAR ** argv)
{
 
int para3 = 3;
int para2 = 2;
TEST(2); //cout<
<
TEST(3); //cout<
<
 
TEST2(test) ;//cout<<"test"<
TEST2("test2"); //cout<<""test2""<
 
return 1;
}

转载于:https://www.cnblogs.com/qinfengxiaoyue/archive/2013/02/03/2890581.html

你可能感兴趣的文章
「镁客早报」特斯拉裁员,马斯克解释没有办法;微软推出Azure DevOps赏金计划...
查看>>
centos 7.4 使用 pgxc_ctl 安装与使用
查看>>
Redis 单key值过大 优化方式
查看>>
【数据库】表分区
查看>>
nutz-sqltpl 1.3.4.RELEASE 发布,在 Nutz 项目中“解决 Java 拼接 SQL”问题
查看>>
城市 | 800个地铁站数据透析的京沪白领图鉴:隐形土豪、无产中产阶级和猪猪女孩...
查看>>
前端脚本!网站图片素材中文转英文
查看>>
linux的常用易忘命令
查看>>
PHP 分割字符串
查看>>
java 基于QRCode、zxing 的二维码生成与解析
查看>>
关于职业规划的一些思考
查看>>
img垂直水平居中与div
查看>>
Fabrik – 在浏览器中协作构建,可视化,设计神经网络
查看>>
防恶意注册的思考
查看>>
http2-head compression
查看>>
C# 命名空间
查看>>
订餐系统之同步美团商家订单
查看>>
使用ArrayList时设置初始容量的重要性
查看>>
Java Web-----JSP与Servlet(一)
查看>>
Maven搭建SpringMVC+Mybatis项目详解
查看>>