第十三章编译预处理和动态存储分配 13.1编译预处理 以#号开头的行,统称为编译预处理如 #define #include 定义:对C源程序编译前,由编译预处理程序一 进行预处理 每行的结束不能加
第十三章 编译预处理和动态存储分配 13.1 编译预处理 •以#号开头的行,统称为编译预处理如 #define,#include •定义:对C源程序编译前,由编译预处理程序 进行预处理 •每行的结束不能加;
3.1.1宏替换 无参数的宏定义 格式:# define宏名替换文本 or# define宏名(说明宏名已被”定义“ 如:# define sⅠZE100 ·替换文本中可以包含已定义过的宏名 如:# define pⅠ3.14 #define ADdPi(PI+1) #define TWO ADDPI (2 ADDPD
13.1 .1宏替换 一、无参数的宏定义 • 格式:#define 宏名 替换文本 or #define 宏名 (说明宏名已被”定义“) 如 :#define SIZE 100 • 替换文本中可以包含已定义过的宏名 如: #define PI 3.14 #define ADDPI (PI+1) #define TWO_ADDPI (2*ADDPI)
宏定义在一行中写不下,可在最后加“来继续 同一个宏名不能重复定义 ·替换文本不能替换双引号中与宏名相同的字符串 替换文本并不替换用户标识符中的成份 通常宏名的标识符用大写,这仅是一种习惯 宏定义的位置一般放在程序的开头
•宏定义在一行中写不下,可在最后加“\”来继续 •同一个宏名不能重复定义 •替换文本不能替换双引号中与宏名相同的字符串 • 替换文本并不替换用户标识符中的成份 •通常宏名的标识符用大写,这仅是一种习惯 •宏定义的位置一般放在程序的开头
有参数的宏定义 格式:# define宏名(形参表)替换文本 .fp: #define Mu(X, y)((X)*(y)) a=MU(5,2)/*引用带参的宏名* b=6/MU(a+3a); 注意:同一宏名也不能重复定义 圆括号不能少
二、有参数的宏定义 •格式: #define 宏名(形参表) 替换文本 •如: #define MU(X,Y) ((X)*(Y)) ………… a=MU(5,2); /*引用带参的宏名*/ b=6/MU(a+3,a); 注意:同一宏名也不能重复定义 ` 圆括号不能少
注意:宏替换不占运行时间 实参不能替换在双引号中的形参 三、终止宏定义 用# undef提前终止宏定义的作用域 1312文件包含 文件包含:指在一个文件中,去包含另一个 文件的全部内容 形式:# include“文件名“或# include
注意:宏替换不占运行时间 实参不能替换在双引号中的形参 三、终止宏定义 用#undef提前终止宏定义的作用域 13.1.2 文件包含 文件包含:指在一个文件中,去包含另一个 文件的全部内容。 形式:#include “文件名“ 或 #include
说明:一般把包含文件称为“头文件” 它有一些公用的# define命令行、外部说明 或库函数的原型说明。 可以有多个# include。当头文件修改后, 必需重新编译
说明:一般把包含文件称为“头文件” 它有一些公用的#define命令行、外部说明 或库函数的原型说明。 可以有多个#include 。当头文件修改后, 必需重新编译
132动态存储分配 静态存储分配:预先分配的内存空间是固定不 变的 动态存储分配:随时申请和释放内存空间 注:必须在程序开头包含头文件 stdlib. h
13.2动态存储分配 静态存储分配:预先分配的内存空间是固定不 变的 动态存储分配:随时申请和释放内存空间 注:必须在程序开头包含头文件stdlib.h
1321mac函数和free函数 1mllc函数 它的返回值类型为void*;调用形式为 malloc (size),其中size的类型为 unsigned int 此函数用来分配size个字节的存储区,返回 个指向存储区首地址的基类型为vod的地址 如下所示:
13.2.1 malloc函数和 free函数 1.malloc 函数 • 它的返回值类型为void*;调用形式为malloc (size),其中size的类型为 unsigned int • 此函数用来分配size个字节的存储区,返回 一个指向存储区首地址的基类型为void的地址 •如下所示:
int x p float“pl pi(int )malloc(2) pf=(float* )malloc(4) 以上程序段使p指向一个int类型 的存储单元,p指向foat类型 的存储单元。 注:括号中的*号不可少 若fpl=NULL)*pi=6; if(pf] =NULL)*pf-3.9
int *pi; float *pf; pi=(int*)malloc(2); pf=(float*)malloc(4); 以上程序段使pi指向一个int类型 的存储单元, pf指向float类型 的存储单元。 注:括号中的*号不可少。 若if(pi!=NULL) *pi=6; if(pf!=NULL) *pf=3.9;
执行后 6 3.9 f
6 3.9 执行后: pi pf