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

原创 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

 


 

Override和Overload的含义去区别

最近看了一下关于java的基础知识,对此作了一下搜集整理:  java中的继承,方法覆盖(重写)override与方法的重载overload的区别  方法的重写(Overriding)和重...
  • u011860731
  • u011860731
  • 2015年09月25日 11:25
  • 5268

函数式宏定义和普通函数的区别

在C及C++语言中允许用一个标识符来表示一个字符串,称为宏,该字符串可以是常数、表达式、格式串等。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。...
  • wang664626482
  • wang664626482
  • 2016年08月29日 16:22
  • 1147

AdaBoost与随机森林 简单区别

AdaBoost 首先明确一个大方向:强可学习和弱可学习是等价的。所以,弱可学习方法可以提升为强可学习方法。AdaBoost最具代表性。 对于提升方法,有两个问题需要回答: 每一轮如...
  • suibianshen2012
  • suibianshen2012
  • 2016年05月28日 19:48
  • 3291

prototype与__proto__的含义、区别以及使用场景

1、每个对象(包括函数、函数的prototype对象)都有一个__proto__属性,她指向创建该对象的函数的prototype属性 2、每个函数都有一个prototype对象,而只有proto...
  • u013769818
  • u013769818
  • 2017年01月12日 15:18
  • 243

DD路径MM路径d的含义与区别

  • 2011年06月14日 18:33
  • 862B
  • 下载

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

在解决oracle的memory_target和linux system memory的问题是了解了一下df命令的用法: df 命令: linux中df命令的功能是用来检查linux服务器...
  • u013393648
  • u013393648
  • 2016年10月18日 17:26
  • 388

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

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

设计模式随笔-策略模式与简单工厂的区别

1. 概述 策略模式:策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理 简单工厂:专门负责将大量有共同接口的类实例化 两个模式的大概思路没有怎么变,都是通过多态去减少...
  • u011517841
  • u011517841
  • 2016年11月22日 09:53
  • 111

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

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

博客园的 “随笔、文章、日记”有什么区别?

博客园的 “随笔、文章、日记”有什么区别?生成的url有区别“p/articles/diary”,并且日记不公开...
  • yunweifun
  • yunweifun
  • 2017年12月17日 09:25
  • 100
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【随笔】#与 ##的使用含义与区别
举报原因:
原因补充:

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