define 宏的边缘效应

define 注意“边缘效应”,例:#define N 2+3, N 的值是 5。

1
2
double a;
a = (float)N/(float)2;

在编译时我们预想 a=2.5,实际打印结果是 3.5 原因是在预处理阶段,编译器将 a=N/2 处理成 a=2+3/2,这就是 define 宏的边缘效应,所以我们应该写成 #define N (2+3)。

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>

#define N 2+3
//正确写法 #define N (2+3)

int main(){
double a ;
a = (float)N/(float)2;
printf("a 的值为 : %.2f", a);

return 0;
}

以下是一个求矩形面积的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>

#define LENGTH 10+10
//正确写法 #define LENGTH (10+10)
#define WIDTH 5
#define NEWLINE '\n'
int main(){
int area;
area = LENGTH * WIDTH;
printf("value of area : %d", area);
printf("%c", NEWLINE);
return 0;
}

以上实例输出结果为:

1
value of area : 60

所以如果我们需要得到正确结果应该将 #define LENGTH 10+10 修改为 #define LENGTH (10+10)。