A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Star_FDt78 中级黑马   /  2015-12-12 22:15  /  565 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

概念:
以#开头的预处理命令,如包含命令#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是给数据类型取了个别名,别名依旧具有数据类型定义说明的功能

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马