概念:
以#开头的预处理命令,如包含命令#include,宏定义命令#define等。在源程序中这些命令都放在函数之外,而且一般都放在源程序的前面,它们称为预处理部分
所谓预处理是指在进行编译的第一遍之前所做的工作。预处理是c语言的一个重要的功能,它由预处理程序负责完成
c语言提供了多种预处理功能,如 宏定义,文件包含,条件编译等
源程序 —> 预处理(宏替换)—> 编译 —> 链接 —>执行程序
1 宏的概念及无参宏定义方法
宏定义是由原程序中的宏定义命令完成的,宏代换是由预处理程序自动完成的。在c语言中,宏分为有参数和无参数两种
2 无参宏定义:后面不带参数,格式如下
#define 宏名 字符串
其中#表示这是一条预处理指令,define为宏定义命令,标识符为宏名,字符串 可以是常数,表达式,格式串
3 宏替换
源程序在编译之前,由预处理程序对我们写的源代码进行处理,会把源代码中所有出现宏名的地方一律使用宏的内容去替换,不会在外围加上括号,如有需要,在定义的时候加上
4 有参宏的定义
#define 宏名(形参表) 字符串
例子:
#define SUM(a) a+a
SUM(3) //不仅要 a+a替换,而且还要把实参3带入字符串中
int n =SUM(3);//n = 6
#define M(x,y) x*y+x+y
int result = M(4,5);// result=29
5 有参宏的使用注意事项
1->宏的形参之间之间可以出现空格,但宏名跟参数之间不能出现空格
2->每个参数最好用括号括起来(如有必要)
3->可以用宏来定义多个语句
6 应用:使用有参宏求最大值
#define MAX(a,b) a>b?a:b
int m = MAX(34,88);//m就是这两个数的最大值
7 #define与#typedef的区别
#define INIT1 int* //定义一个宏,宏名:INIT1
typedef int* TINT; //int起一个别名 TINT
int num=10;
INIT1 a,b; //a是指针,b不是指针
TINT a1,b1; //a,b都是指针
总结:宏定义只是做一个简单的替换,而typedef是给数据类型取了个别名,别名依旧具有数据类型定义说明的功能
|
|