define的边缘效应

在使用 define 时,我们注意其自身的“边缘效应”,例如:

#define N 2+3
double a;
a = (float)N/(float)2;

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

#include 
#define N 2+3
//正确写法 #define N (2+3)
int main()
{   
    double a ;
    a = (float)N/(float)2;
    printf("a 的值为 : %.2f", a);   
    return 0;
}

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

#include 
#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;
}

以上实例输出结果为:value of area : 60
所以如果我们需要得到正确结果应该将 #define LENGTH 10+10 修改为 #define LENGTH (10+10)

你可能感兴趣的:(C语言)