C++笔记之macro
来源:互联网 发布:交换机sfp端口 编辑:程序博客网 时间:2024/06/05 09:42
macro(宏)感觉很强大,但是又晦涩难懂。
平时只是用到那些基础的,比如#define XX 之类的,但是如果要阅读其他代码的话就感觉不够用了。
记得看Imperfect C++中文版的时候,遇到了一个问题,代码大概如下
#define CON(x, y) x##y#define CONNECT(x, y) CON(x, y)然后作者说至于为什么这样设计的,请读者自己思考。
当时一直就搞不懂,为什么会需要间接调用而不是直接就调用,这两个有什么区别吗?问题是什么,我都忘记了。
后来当再次想起这个问题的时候,我就问了一下某个群的高手,然后给了我一个链接Click here,我研读了一下,然后整理宏的相关部分。
1.形如#define T(x) #x:
这个宏替换后变成“x"
2. 形如#define C(x, y) x##y
这个替换后成为xy,这里不是“xy"
3.形如上面的间接调用,这里是一个难点:
其实当搞明白之后也很简单,就是为了展现出自己原来的模样,没有被认错
比如:
#define FIVE 5#define STR(x) #x//直接调用#define STRING(x) STR(x)//间接调用//直接调用,其结果为FIVESTR(FIVE);//间接调用,其结果为5STRING(FIVE)通过间接调用,如果x和y是宏的话,那么他们就会在进行##操作之前得到替换,所以就被替换成真正的模样了。
( If either of the tokens next to an ##
is a parameter name, it is replaced by its actual argument before##
executes. The actual argument is not macro expanded first。)
前路漫漫,还是继续走下去吧~
转载请注明原文地址,谢谢~
0 0
- C++笔记之macro
- C语言学习笔记(八) -宏定义 Macro Definition
- c detail of macro
- List combining / C Macro
- C Macro UG
- CONTAINING_RECORD macro之研究
- CONTAINING_RECORD macro之研究
- CONTAINING_RECORD macro之研究
- qt 之 macro
- macro
- macro
- macro
- Macro小记之if循环
- skill c for macro (c语言)
- C语言中Macro的终极用法
- Macro expand in C programming language
- A Macro Defined Ring Buffer(C Language)
- 宏的用法(macro in C)
- iOS开发----iOS8 注册推送
- Newtonsoft.Json.4.5.11使用方法总结---反序列化json字符串
- 抓住自身热点事件,做足焦点营销
- 大大的限时特惠
- iPhone大小的盒子服务器Cubieboard
- C++笔记之macro
- Trafodion: 针对HBase的SQL事务支持
- arguments.callee 调用自身
- xen的安装
- Xcode6.1 Prefix.pch
- 从哪里下载老版本的android sdk
- HTTP协议之基本认证
- Keywords Search - HDU 2222 AC自动机
- 【bzoj 1635】: [Usaco2007 Jan]Tallest Cow 最高的牛