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

原创 2016年05月30日 17:14:12

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

    在程序中扩展#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

 


 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Pytoh随笔之浅拷贝与深拷贝的区别

在Python中,对变量进行赋值操作,实际是一个浅拷贝动作,将赋值号右边的对象引用赋给了赋值号左边的变量。 s = "abcdefg" 如上面这句代码,实际是先创建一个字符串对象,内容为abcde...

RPG和SNS类游戏的cache server设计和实现区别随笔

把平时对cache这块内容的思考、实践总结一下。 游戏的cache server的设计和实现策略由游戏逻辑特点决定。RPG和SNS类用户(这里用户指游戏中的玩家帐号和角色)行为特征不一样,他们的...

随笔linux命令df中df -h和df -i的区别

在解决oracle的memory_target和linux system memory的问题是了解了一下df命令的用法: df 命令: linux中df命令的功能是用来检查linux服务器...

随笔- viewDidLoad, viewWillDisappear, viewWillAppear等区别及各自的加载顺序

viewWillAppear:  Called when the view is about to made visible. Default does nothing视图即将可见时调用。默认情...

随笔--android上遇到的易忽视的区别

1)android:src 与 android:background 的区别:        今天在设置ImageView属性的时候看到src和background属性,以前就以为是一前一后两层图案...

strlen、sizeof,sizeof(*)含义及区别

如:char  *str = “ghjuikls”; strlen(str)=4 表示str指针指向的字符串长度,计算长度时遇到'\0’结束,长度不包括'\0’; sizeof(str)=4 表示...

总结boosting,Adaboost,Bootstrap和Bagging的含义和区别

这几个名词经常混淆,在调查了百度,wiki和一些网友的分享,特整理如下: Boosting算法: 弱分类器:分类效果差,只是比随机猜测好一点。 强分类器:具有较高的识别率,较好的分类效果。(在百...
  • TX951
  • TX951
  • 2016-11-26 21:04
  • 1260

汇编语言中PTR的含义及作用以及Mov和lea的区别

一、汇编语言中PTR的含义及作用 mov ax,bx ;是把BX寄存器“里”的值赋予AX,由于二者都是word型,所以没有必要加“WORD” mov ax,word ptr [bx];是把内存地址...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)