第六章预处理
2014-04-27 00:50
369 查看
在编程中,为了方便,有的时候我们会使用宏定义,首先,我们要明确一点,宏定义与函数式不同的,宏定义的功能就是替换,在编译时替换掉代码里面的使用宏的地方。
如求两个数中大的一个:
在使用宏定义时间,我们要注意几点:
1.定义时中间不能有空格,如:
宏定义在定义时中间不要有多余的空格,在使用的时候没关系,如:
使用时:f (1);等价于f(1);
2.进行宏定义时,在一些地方要加上括号,
替换后的结果:2 > 0 ? 2 : -2 + 1 ,显然不对;
3.可能出现重复计算的情况:一方面会使得效率低下,另一方面,有可能出错;
不是2,3,4,这里就是因为,a[i++]在用max()替换后被重复计算了,导致出错了。
4.宏定义与typedef的一些异同:
相同之处:定义单个变量
如求两个数中大的一个:
#define max(x,y) ((x) > (y) ? (x) : (y))
在使用宏定义时间,我们要注意几点:
1.定义时中间不能有空格,如:
#define f (x) ((x) * (x))代码的原意是定义这样一个替换f(x) = x * x; 但是,在这里的效果是f被 (x) ((x) * (x))这样一个整体替换了,显然不对了。
宏定义在定义时中间不要有多余的空格,在使用的时候没关系,如:
#define f(x) ((x) * (x))
使用时:f (1);等价于f(1);
2.进行宏定义时,在一些地方要加上括号,
#define abs(a) a > 0 ? a : -a
printf("%d\n", abs(2)+1);//结果为2
替换后的结果:2 > 0 ? 2 : -2 + 1 ,显然不对;
3.可能出现重复计算的情况:一方面会使得效率低下,另一方面,有可能出错;
int a[10] = {2, 3, 1}, big = 0, i = 1, n = 4; while(i < n) { big = max(big, a[i++]); printf("%d\n", i); }运行结果如下:
不是2,3,4,这里就是因为,a[i++]在用max()替换后被重复计算了,导致出错了。
4.宏定义与typedef的一些异同:
相同之处:定义单个变量
#define F int typedef int G;
F a; G b;不同之处:定义多个变量
#define FF int* typedef int* GG;
FF a, b;//这里a是int型指针,b是int型整数 GG c, d;//这里c和d都是int型指针
相关文章推荐
- how to optimizing php
- java学习路线
- QT库学习之安装QT库
- linux下编译安装新版本python和tornado
- SQL Server 2005 & 2008 遇到的一些问题
- SSH框架_struts2的Action中获取request、response对象的方法
- 【贪心】POJ1328 Radar Installation
- Ubuntu安装完后设置root密码
- gnuradio companion 找不到第三方模块gr-osmosdr的问题
- GR/IR科目
- Specular Offset
- Android教程示例BitmapFun分析
- 解决Help and Manual编译的chm文件不能搜索主题的问题
- 如何看待赌场的IT系统--澳门之行(1)
- 影摘(更新中)
- Bone Collector
- 4.27随笔
- Java连接SAP ————JCO 3.0技术详解
- 微信公众平台搭建与开发(一)基本搭建和编辑模式
- java 采集新闻数据