一、预定义
1.预定义符号
二、#define
1.定义标识符
语法: #define name stuff
例如:
#define MAX 100
这里就是定义标识符,一般要求全大写,代码将会在预编译阶段将所有的MAX统统替换为100通常情况下 在定义的时候是不将 ; 写在末尾的,避免带来不必要的麻烦。
2.定义宏
为什么要定义宏?
因为对于一些简单的函数,宏定义运行得更快,例如比较两个数的较大值
函数的写法
//函数的写法
int MAX(int x, int y)
{
return x > y ? x : y;
}
int main()
{
int a = 20;
int b = 30;
int c = MAX(a, b);
printf("max=%d\n", c);
return 0;
}
//宏定义的写法
#define MAX(X,Y) (X)>(Y)?(X):(Y)
//注意:MAX后的括号必须紧挨着MAX,参数也尽量用括号括起来,因为宏定义后并不会进行运算而是进行替换,例如定义一个求一个数平方的宏定义
#define PF(X) X*X,当输入的x=1+2时并不会输出9而是输出5,
因为仅仅是完成替换而已1+2*1+2,所有当我们使用宏定义
的时候注意括号是否要加上,避免出现一些不必要的错误。
int main()
{
int a = 20;
int b = 30;
int c = MAX(a, b);
printf("%d\n", c);
return 0;
}
三、宏定义的优劣
1.优点
不用担心数据的类型,宏是类型无关的,而函数是要对具体的类 型进行使用,
运行的速度也是要快于函数的,所以宏经常被使用在一些比较简单代码少的函数上。
2.劣势
宏是进行替换的所以当宏的代码比较多,而需要替换的总数偏多的时候就会使代码长度增加得太多。
宏是无法进行调试的。
宏是类型无关的,所以也就是不够严谨的。
宏会带来运算优先级的问题。