您的位置:首页 > 其它

第六章预处理

2014-04-27 00:50 369 查看
在编程中,为了方便,有的时候我们会使用宏定义,首先,我们要明确一点,宏定义与函数式不同的,宏定义的功能就是替换,在编译时替换掉代码里面的使用宏的地方。

如求两个数中大的一个:

#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型指针
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: