C++/C 宏定义(define)中# ## 的含义(转)
http://hi.baidu.com/kiraversace/item/1148ee057147981a4ac4a3e9
C++/C 宏定义(define)中# ## 的含义
define 中的# ## 一般是用来拼接字符串的,但是实际使用过程中,有哪些细微的差别呢,我们通过几个例子来看看。
#是字符串化的意思,出现在宏定义中的#是把跟在后面的参数转成一个字符串;
eg:
1
2
3
|
#define strcpy__(dst, src) strcpy(dst, #src) strcpy__(buff,abc) 相当于 strcpy__(buff,“abc”) |
##是连接符号,把参数连接在一起
1
2
3
|
#define FUN(arg) my##arg 则 FUN(ABC) 等价于 myABC |
再看一个具体的例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include <iostream> using namespace std; #define OUTPUT(A) cout<<#A<<":"<<(A)<<endl; int main() { int a=1,b=2; OUTPUT(a); OUTPUT(b); OUTPUT(a+b); return 1; } |
去掉#号我们得到这样的结果,直接把a,b的值打印出来了,这是符合语法规则的,所以#的作用显而易见。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include <iostream> using namespace std; #define OUTPUT(A) cout<<A<<":"<<(A)<<endl; int main() { int a=1,b=2; OUTPUT(a); OUTPUT(b); OUTPUT(a+b); return 1; } |
C++/C 宏定义(define)中# ## 的含义(转)的更多相关文章
- C++ 宏定义#define 中##的使用
在C++的宏定义中,符号##一般是用于连接,包括参数的连接,参数与标识符的连接等,然后形成一个新的标识符. 下面举几个例子来进行说明. eg1: #define ADD(a,b) a##b #defi ...
- 宏定义#define和typedef的区别和典型范例题目辨析
宏定义#define pStr char* ,是直接把程序中出现pStr的地方替换成char* ,直接替换: typedef char * pStr; 是给char*定义一个别名叫做 pStr; ...
- C语言 预处理二(宏定义--#define)
//#define 宏定义(宏定义一般大写) //知识点一-->#define的作用域:从#define开始,从上往下,如果遇到#undef就到#undef处结束,如果没有就是作用于当前整个文件 ...
- 读书笔记 effective c++ Item 2 尽量使用const,枚举(enums),内联(inlines),不要使用宏定义(define)
这个条目叫做,尽量使用编译器而不要使用预处理器更好.#define并没有当作语言本身的一部分. 例如下面的例子: #define ASPECT_RATIO 1.653 符号名称永远不会被编译器看到.它 ...
- C语言宏定义#define用法
#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用 ...
- 宏定义#define整理
一.宏定义#define 优点:一方面可以节省程序的空间上的篇幅,另外,恰当地使用宏定义可提高程序的时间效率.代码可以写的通俗易懂.可以提高程序的清晰性.可读性,使于修改移植等. 缺点:宏定义的使用实 ...
- 【C++】内联函数(inline)和宏定义(# define)的优劣及其区别
一.宏定义:# define 1.为什么要使用宏? 因为调用宏比调用函数更有效率,函数的调用必须要将程序的执行顺序转移到函数所存放的内存地址中,将函数程序内容执行完后,再返回到执行该函数前的地方,这种 ...
- c语言宏定义#define的理解与资料整理
1. 利用define来定义 数值宏常量 #define 宏定义是个演技非常高超的替身演员,但也会经常耍大牌的,所以我们用它要慎之又慎.它可以出现在代码的任何地方,从本行宏定义开始,以后的代码就就都认 ...
- iOS之宏定义#define
最基本的宏定义用法 #define aaa bbb 表示用aaa替换bbb的内容. 宏作用范围 宏的作用范围是在当前文件内, 如果需要作用于其他类(如在类b调用类a已定义宏),那么需要在类b引入类a的 ...
- _编程语言_C++_宏定义#define 和 常量const 的区别
C++中有两种定义常量的方式:#define预处理和const关键字 #define 预处理指令 #include <iostream> using namespace std; #def ...
随机推荐
- 【Java】 剑指offer(63) 股票的最大利润
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖交易该 ...
- C++雾中风景番外篇:理解C++的复杂声明与声明解析
在学习C系列语言的过程之中,理解C/C++的复杂声明一直是初学者很困扰的问题.笔者初学之时也深受困扰,对很多规则死记硬背.后续在阅读<C专家编程>之后,尝试在编译器的角度来理解C/C++的 ...
- springboot项目接入配置中心,实现@ConfigurationProperties的bean属性刷新方案
前言 配置中心,通过key=value的形式存储环境变量.配置中心的属性做了修改,项目中可以通过配置中心的依赖(sdk)立即感知到.需要做的就是如何在属性发生变化时,改变带有@Configuratio ...
- 算法进阶面试题05——树形dp解决步骤、返回最大搜索二叉子树的大小、二叉树最远两节点的距离、晚会最大活跃度、手撕缓存结构LRU
接着第四课的内容,加入部分第五课的内容,主要介绍树形dp和LRU 第一题: 给定一棵二叉树的头节点head,请返回最大搜索二叉子树的大小 二叉树的套路 统一处理逻辑:假设以每个节点为头的这棵树,他的最 ...
- 【随笔】借鉴 & KPI式设计
1. 别人(某成功案例)是这么做的,我们也就这么做吧 刚来组里一会就目睹了需求讨论会上的一场争执,大概就是某产品经理在解释需求解释到后面有些说不通了就说“xxx App是这么做的我觉得我们也可以这样做 ...
- 安卓工作室android studio 美化 ,设置背景图片。
作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E-mail: 313134555 @qq.com sexy Editor 点击file-> ...
- Django-自定义增删改查组件的一些体会
1.路由系统 namespace,用于区分相同name的url,通过namespace为url添加一个前缀 反向生成URL的时候 reverse('namespace:name') {% url &q ...
- PHP Web项目开发学习,经验谈
列个表格吧,看着也比较方便: 时间 事项 六月 七月 八月 九月 工作任务 前端页面 服务端页面 地图定位 服务器搭建 图片上传 视频文件信息的获取 关键词 Css+div+js PHP,谷歌maps ...
- 前端性能优化 —— 减少HTTP请求
简要:对于影响页面呈选 的因素有3个地方:服务器连接数据库并计算返回数据 , http请求以及数据(文件)经过网络传输 , 文件在浏览器中计算渲染呈选: 其中大约80%的时间都耗在了http请求上,所 ...
- JNI编程实现(Linux)
JNI是Java Native Interface的缩写,是Java平台的本地调用,从Java1.1就成为了Java标准的一部分,它允许Java代码和其它语言的代码进行互相调用,只要调用约定支持即可, ...