C宏系统缺陷
#define BOOL(n) BOOL##n
#define BOOL0 0
#define BOOL1 1
#define BOOL2 1
#define BOOL3 1
#define IF(c, x, y) IF##c(x, y)
#define IF0(x, y) y
#define IF1(x, y) x
上面的宏是想要实现选择控制,IF中传入逻辑值c,若c为0则返回y, 若c为1则返回x
#define IF(c, x, y) IF_C(c, x, y)
#define IF_C(c, x, y) IF##c(x, y)
这样,IF( BOOL(3), "t", "f" )就会先展开参数,变成 IF( BOOL3, "t", "f"),
#define INC_0 1
#define INC_1 2
#define INC_2 3
#define INC_3 4
…………… #define DEC_x x
………………
#define x y+1
#define y x+1
则展开x时,先展开成y+1,继续展开y,x+1+1,这时又碰到了x,预处理器便停止展开了。
#define WHLE(...) WHILE##n(...)
#define WHILE0(...) xxxxx
#define WHLE1(....) WHILE0(......)
#define WHLE2(....) WHILE1(......)
#define WHLE3(....) WHILE2(......)
...................
#define square(x) x*x
cout<<square(+)<<endl;
替换后就变成了2+3*2+3,所以写宏时还要注意在必要的地方加括号。。。。。。。。。
#define ADD(n, m) ..........
#define FOR(k, op,...) ......
若调用FOR((3,3), ADD,...),想要在FOR内部ADD(3,3),发现预处理器会报错,说ADD没定义。
C宏系统缺陷的更多相关文章
- 【2018.10.11 C与C++基础】C Preprocessor的功能及缺陷(草稿)
一.前言及参考资料 C Preprocessor即所谓的C预处理器,C++也继承了C的预处理程序,但在C++语言的设计与演化一书中,C++的设计者Bjarne Strustrup提及他从未喜欢过C预处 ...
- ES6笔记(一):ES6所改良的javascript“缺陷”
块级作用域 ES5没有块级作用域,只有全局作用域和函数作用域,由于这一点,变量的作用域甚广,所以一进入函数就要马上将它创建出来.这就造成了所谓的变量提升. ES5的"变量提升"这一 ...
- B/S系统常见缺陷整理和解决方案
最近部门整理了今年所有项目测试团队提出的BUG,筛选了几十个作为常规通用的缺陷,我根据这些缺陷内容,去掉和业务相关的知识,整理出了一份缺陷描述和解决方案. 其实WEB系统中常规的缺陷分类后也就那么多, ...
- 阮一峰对js的见解(10大缺陷)
一.为什么Javascript有设计缺陷?这里有三个客观原因,导致Javascript的设计不够完善.1. 设计阶段过于仓促Javascript的设计,其实只用了十天.而且,设计师是为了向公司交差,本 ...
- iOS UIPageViewController缺陷
为什么弃用UIPageViewController?问题1:设置UIPageViewController为UIPageViewControllerTransitionStyleScroll且调用set ...
- PHP处理0e开头md5哈希字符串缺陷/bug
PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他 ...
- bookstore网上书店测试缺陷报告2
Bookstore网上书店系统测试缺陷报告 缺陷编号 01.01.0002 发现人 吴赵昕 记录日期 2016-06-10 所属模块 购物车 确认人 吴赵昕 确认日期 2016-06-10 当前状 ...
- bookstores网上书店测试缺陷报告1
Bookstore网上书店系统测试缺陷报告 缺陷编号 01.01.0001 发现人 吴赵昕 记录日期 2016-06-10 所属模块 购物车 确认人 吴赵昕 确认日期 2016-06-10 当前状 ...
- HoloLens外包团队:HoloLens有一个严重缺陷,但微软并不想改
微软的HoloLens自公布以来,几乎获得了一边倒的赞美声.它使用了增强现实(AR)技术,在现实世界中叠加一层虚拟影像,能让人仿佛置身魔法世界.但从最新的Hololens硬件体验上看,它可能有一个致使 ...
随机推荐
- poj -2975 Nim
Nim Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4312 Accepted: 1998 Description ...
- HDOJ/HDU 1865 1sting(斐波拉契+大数~)
Problem Description You will be given a string which only contains '1'; You can merge two adjacent ' ...
- UVa 11077 Find the Permutations(置换+递推)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=35431 [思路] 置换+递推 将一个排列看作一个置换,分解为k个循 ...
- OpenOffice 服务开机启动
1.准备以下软件 OpenOffice3.0,Windows Resource Kit Tools 分别默认安装 2.打开Windows Resource Kit Tools -> Comman ...
- Javac编译和JIT编译
编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行: 其中绿色的模块可以选择性实现.很容易看出,上图中 ...
- HTTP协议的特点
HTTP协议的主要特点可概括如下: 1.支持客户/服务器模式.2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径.请求方法常用的有GET.HEAD.POST.每种方法规定了客户与服务器联系的 ...
- visual studio 2015 企业版 序列号及官方下载地址
VisualStudio 2015 正式版已经可以通过官方下载了. Visual Studio 是一套基于组件的软件开发工具和其他技术,可用于构建功能强大.性能出众的应用程序.Visual Studi ...
- [RxJS] Combination operator: combineLatest
While merge is an OR-style combination operator, combineLatest is an AND-style combination operator. ...
- Qt 学习之路:QML 和 QtQuick 2
前面我们已经了解了 Qt 的一部分内容.这部分内容全部集中在 C++ 方面.也就是说,至今为止我们的程序都是使用 C++ 语言完成的.这在 Qt 5 之前的版本中是唯一的途径.不过,自从 Qt 5 开 ...
- MapReduce最佳成绩统计,男生女生比比看
上一篇文章我们了解了MapReduce优化方面的知识,现在我们通过简单的项目,学会如何优化MapReduce性能 1.项目介绍 我们使用简单的成绩数据集,统计出0~20.20~50.50~100这三个 ...