- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十三章预处理和动态存储分配
第13章
编译预处理和动态
存储分配 ;高级语言的源程序 ;;例:使用不带参数的宏定义。
#define N 10
void main()
{ int a[N],i;
for(i=0;iN;i++)a[i]=i*i;
for(i=0;iN;i++)printf(“%d “,a[i]);
printf(“\n”);
}
说明:
1)表示宏名的标识符习惯用大写字母表示,以便与变
量名区别,这并非规定。
2)宏定义的位置一般写在程序的开头。;
;例:不带参数的宏定义。
#define PR printf(“\n”)
void main ( )
{ int i ,j ,k;
i=15; j=9;
printf(“%d %d”, i+j, i-j);
PR; /* 展开:printf(“\n”) */
printf(“%d %d”, i*j, i/j);
PR; /* 展开:printf(“\n”) */
} ;(2) 带参数的宏定义形式
#define 宏名(形参表) 替换文本
其中:宏名 是用户定义的标识符。
形参表 指定的形参(由标识符命名),形参之
间用逗号分开。
替换文本 是字符串(通常包含指定的形参)。
作用:编译预处理程序对源程序中出现的带实参的宏
,用实参对#define命令行中的替换文本(字符
串)中形参进行替换。
例如:#define F(x,y) x*x+y*y
┆
int d1;
d1=F(3,2)+10; /* d1=3*3+2*2+10; */
把实参3和2代替宏定义中形参x和y,即F(3,2)表示3*3+2*2 。;例:带参数的宏定义。
#define M(x,y) xy?x:y
void main ( )
{ int i ,j ,k;
i=5; j=10;
k=10*M(i, j); /* 展开:k=10*510?5:10; */
printf (“%d\n”,k)
}
说明:
1)调用带参数的宏时,实参与形参的个数应相同。
2)实参可以是常量、变量或表达式形式。
3)带参数宏替换与函数调用有类似之处,但前者对参 ; 数没有类型的要求。
4)宏替换中,实参不能替换双引号中的形参。
5)与不带参数的宏定义一样,同一个宏名不能重复定
义。
(3) 终止宏定义形式
#undef 已定义宏名
例如: #define PI 3.14159
main( )
┆
#undef PI
从终止宏定义(#undef PI)后PI无定义,不代表3.14159了。;*使用宏定义的优势:
1) 宏替换不占程序运行时间,只占编译时间。
2) 便于阅读
3) 修改方便
注意: 宏定义最后没有“ ;” 。
;2. 文件包含
就是在一个文件中,将已有的另外一个文件的全部内容包含进来。
由于C的库函数很多,将这些函数根据类型不同分类, 分别放在不同的文件中(例如, 数学函数:math.h 、输入/出: stdio.h 、 字符函数: ctype.h 、字符串:string.h 、动态分配:malloc.h 其它:tdlib.h 。),编程时,使用哪个文件中的函数, 将该文件用文件包含的形式,写在程序的前面
。 C语言提供了#include 命令行, 实现“文件包含”功
能,其一般形式为:
#include “文件名”
或 #include 文件名 ;编译预程序将用指定的文件中的内容替换此命令行。
如果文件名用双引号括起来时,系统先在用户当前
目录查找要包含的文件,若找不到,再按标准方式(系
统指定的目录)查找;如果文件名用尖括号括起来时,
按标准方式查找。
说明:
1) #include 命令行的位置一般写在源程
文档评论(0)