常量和宏
define定义常量
#include<stdio.h>
#define MAX = 10000
int main()
{
printf("%d\n",MAX);
return 0;
}
这就是使用 define 定义常量,定义完后下面可以直接使用,得到打印结果 10000
--------------------------------------------------------------------------------------------------------------------------------
define定义宏
还是使用 define 定义一个符号,这里使用定义 ADD 演示。
#define ADD
这时我们希望 ADD 可以完成两个数的相加,那在这个的后面就要加上 (X,Y)
#define ADD (X,Y)
当这两个参数传进去,可以完成相加的操作,这个通过加上 X+Y 实现
#define ADD (X,Y) X+Y
这样就完成了 define 的定义,但是这样操作会出现一些问题,比如下面这段代码:
#include<stdio.h>
#define ADD (X+Y) X+Y
int main()
{
printf("%d\n",4*ADD(2,3)); //11
return 0;
}
这时得到的结果不是 4*5 得出 20 ,而是 11 。
这是因为 define 定义的宏是被替换的,他是把 ADD 替换成 2+3 ,也就是变成了 4*2+3 ,得出的 11 。
为了避免这种情况的发生,定义宏时应规范。
#define ADD (X,Y) X+Y
其中的 X+Y ,X与Y都可能不是普通的变量,可以是表达式,所以要分别括起来,而 X+Y 是一个整体,需要把宏体整个括起来。
#define ADD (X,Y) ((X)+(Y))
当这样书写后再次运行代码,得出的就是 20 了。
#include<stdio.h>
#define ADD (X+Y) ((X)+(Y))
int main()
{
printf("%d\n",4*ADD(2,3)); //20
return 0;
}