您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 13第十三章编译预处理和动态存储分配
第十三章编译预处理和动态存储分配1.编译预处理在C语言中,凡是以#开头的行都称为编译预处理命令行,命令行的语法与C语言中其它部分无关,根据需要命令行可出现在程序中的任何一个位置,其作用域一直到源文件的末尾。编译预处理就是在C编译程序对C源程序编译之前由编译处理程序编译预处理命令行进出处理的过程。#includestdio.h#includemath.h#includectype.h#includestring.h#definePI3.14159#defineN6(1)宏替换不带参数的宏定义形式:#define宏名替换文本#define宏名#definePI3.14159#defineN5#defineSIZE100宏名:用户定义的标识符,不可与程序中的其它名字相同。程序中当遇到该表示符后用其后的替换文本替换。上面的SIZE可用1003个字符替换,但不可认为SIZE等于整数100.②#defineAA3#defineBB(AA+1)#defineCC(2*BB)/2x=CC/2(2*BB)/2/2(2*(AA+1))/2/2(2*(3+1))/2/2x==?③#defineLEAP_YEARyear%4==0\&&year%100!==0||year%400==0注意:对齐,否则空格为替换文本的一部分①带参数的宏定义形式:#define宏名(形参表)替换文本#defineMU(x,y)((x)*(y))intfun(intx,inty){…….}②调用带参数的宏名时,一对圆括号不可少,圆括号中的实参个数与形参个数相同。若有多个实参,之间应用逗号隔开y=fun(5,2);a=MU(5,2);((x)*(y))((5)*(2))10b=6/MU(a+3,a);6/((x)*(y))6/((a+3)*(a))6/((10+3)*(10)遇到宏名用替换文本替换实参换形参计算结果③替换文本中的形参和整个表达式应该用括号括起来。#defineMU(x,y)((x)*(y))b=6/MU(a+3,a)6/((x)*(y))6/((a+3)*(a))6/(13*10)#defineMU(x,y)(x*y)b=6/MU(a+3,a)6/(x*y)6/(a+3*a)6/(10+3*10)#defineMU(x,y)x*yb=6/MU(a+3,a)6/x*y6/a+3*a6/10+3*10#defineMU(x,y)(x)*(y)b=6/MU(a+3,a)6/(x)*(y)6/(a+3)*(a)6/(10+3)*10#defineMA(x)x*(x-1)(x)*((x)-1)main(){inta=1,b=2;printf(“%d”,MA(1+a+b));}x*(x-1)1+a+b*(1+a+b-1)8(x)*((x)-1)(1+a+b)*((1+a+b)-1)12用#undef终止宏定义的作用域#definePI3.14main(){….#undefPI…….}(2)文件包含形式:#includestdio.h#include”stdio.h”若文件名用双引号括起来系统先在源程序所在的文件目录内查找指定的包含文件,若找不到,在按照系统指定的标准方式到有关目录中查找若文件名用尖括号扩起来系统直接按照指定的标准方式到相关目录中查找。注意:包含文件后缀不一定为.h结尾当包含文件修改后,对包含该文件的源程序要重新编译连接在一个程序中容许有多个#include命令行2.动态存储分配静态存储分配:inta;inta[10];main(){inta;a=1;printf(“%d”,a);printf(“ok”);printf(“good”);}动态存储分配:申请释放main(){申请aa=1;释放申请bb=1释放}(1)malloc函数形式:malloc(size);malloc(1);chara;返回值类型:void*NULL功能:动态分配size个字节的存储单元,返回一个指向存储单元首地址的基类型为void的地址。若没有足够的内存空间可供分配,函数返回NULL举例:short*pi;float*pf;pi=(short*)malloc(2);pi=(short*)malloc(sizeof(short))pf=(float*)malloc(4);if(pi!=NULL)*pi=6;if(pf!=NULL)*pf=6.0;(2)free函数free(pi);(3)calloc函数形式:calloc(n,size);inta[n];void*NULL功能:给n个同一类型的数据项分配连续的存储单元举例:char*ps;ps=(char*)calloc(10,sizeof(char));1chara[10],*ps=a;
本文标题:13第十三章编译预处理和动态存储分配
链接地址:https://www.777doc.com/doc-3060713 .html