欢迎来到天天文库
浏览记录
ID:37168429
大小:26.50 KB
页数:4页
时间:2019-05-21
《13第13章编译预处理和动态存储分配第13章编译预处理和动态存储分配》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第13章编译预处理和动态存储分配主讲人:成江湖学长电话:13975026749QQ:1634754813.1编译预处理在C语言中,凡是以#号开头的行,都称为编译预处理命令行。C语言的预处理命令有:#define、#undef、#include、#if、#else、#elif、#endif、#ifndef、#line、#pragma、#error13.1.1宏替换1、不带参数的宏定义1)不带参数的宏定义命令行形式如下:#define宏名替换文本或#define宏名例如:#defineSIZE100A)宏名是用户定义的标识符,因此,不得与程序中的其他名字相同。B)#define命令行可以
2、不包含“替换文本“,这种情况下仅说明标识符”被定义“。2)替换文本中可以包含已定义过的宏名例如:#definePI3.14#defineADDPI(PI+1)#defineTWO_ADDPI2*ADDPI3)当宏定义在一行中定不下,需要在下一行继续时,只需在最后一个字符后紧接着加一个反斜线’’,如果在‘’前或在下一行的开头留有许多空格,则在宏替换时也将加入这些空格。例如:#defineLEAP_YEARyear%4==0;&&year%100!=0
3、
4、year%400==04)同一个宏名不能重复定义,除非两个宏定义命令行完全一致5)替换文本不能替换双引号中与宏名相同的字符串,例
5、如:如果YES是已定义的宏名,则不能用与它相关的替换文本来替换printf(“YES”)中的YES。6)替换文本并不替换用户标识符中的成分。例如:宏名NO,不会替换标识符中的NOPRO中的NO。7)用作宏名的标识符通常用大写字母表示,这并不是语法规定,只是一种习惯,以便与程序中的其它标识符相区别8)在C程序中,宏定义的定义位置一般写在程序的开头2、带参数的宏定义1)带参数的宏定义命令行形式如下#define宏名(形参表)替换文本例如:#defineMU(X,Y)X*YMu(a+3,b+4)(a+3)*(b+4)a+3*b+43、终止宏定义可以用#undef提前终止宏定义的作用域例如:
6、#definePI3.14Mian(){……………#undefPI…………….}13.1.2文件包含#include“文件名”先从源程序所在的目录内查找指定的包含文件,如果找不到,再按照系统指定的标准方式到有关目录中去寻找。#include<文件名>直接按照系统指定的标准方式到有关目录中去寻找说明:1)包含文件的#include命令行通常应书写在所用源程序文件的开头,故有时也把包含文件称作“头文件”。头文件名可以由用户指定,其后缀不一定用.h。2)包含文件中,一般包含有一些公用的#define命令行,外部说明或对库函数的原型说明。例如stdio.h就是这样的头文件。3)当包含文件修改
7、后,对包含该文件的源程序必须重新进行编译连接4)在一个程序中,允许有任意多个#include命令行。5)在包含文件中还可以包含其他文件。13.2动态存储分配13.2.1malloc函数和free函数1、malloc函数malloc(size)shortint*pi;float*pf;pi=(short*)malloc(2);pi=(int*)malloc(sizeof(int))pf=(float*)malloc(4);pf=(float*)malloc(sizeof(float))2、free函数free(p)13.2.2calloc函数calloc(n,size)n,size的类
8、型都必须为unsignedint例:char*ps;ps=(char*)calloc(10,sizeof(char));开辟了10连续的char类型的存储单元,由ps指向存储单元的首地址,每个存储单元可以存放一个字符,如果没有赋值,则赋初始值0。
此文档下载收益归作者所有