【随笔】#与 ##的使用含义与区别

    简单地说#连接字符串,##连接两个参数    

    在程序中扩展#define定义符号和宏时,需要涉及几个步骤。

1、在调用宏时,首先对参数进行检查,看看是否包含任何由#define定义的符号。如果是,它们首先被替换。

2、替换文本随后被插入到程序中原来文本的位置。对于宏,参数名被他们的值替换。

3、最后,再次对结果文件进行扫描,看看它是否包含任何由#define定义的符号。如果是,就重复上述处理过程。


 宏参数和#define定义可以包含其他#define定义的符号。但是,宏不可以出现递归。

           

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

它可以拼接符号(Token-pasting operator)。

MSDN上有个例子:

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

int token9 = 100;

再调用  paster(9);宏展开后token##n直接合并变成了token9。整个语句变成了

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

在C语言中字符串中的二个相连的双引号会被自动忽略,于是上句等同于

printf("token9 = %d", token9);。

即输出token9 = 100

 


 

阅读更多
个人分类: C语言
上一篇【随笔】预定义符号_FILE__,__LINE__,__DATE__,__TIME__的使用
下一篇【面试简答题(详谈)】宏与函数的区别
想对作者说点什么? 我来说一句

QA和QC的含义区别

2010年10月12日 27KB 下载

Ansi与Unicode

2015年05月09日 2KB 下载

培根随笔集 英语原文

2009年04月06日 150KB 下载

oracle 数据仓库随笔

2011年06月29日 547KB 下载

没有更多推荐了,返回首页

关闭
关闭