- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c语言 函数 预处理
第6章 编译预处理 教学重点与难点: 1.文件包含预处理命令 2.宏定义语句的使用方法 3.条件编译语句的使用方法 C语言与其他高级语言的重要区别是它具有编译预处理功能,即由C语言编译预处理程序实现分析和处理以 “#”开头的编译预处理命令。C语言的编译预处理命令主要有宏定义、文件包含和条件编译。 6.1 文件包含编译预处理 定义:文件包含编译预处理,顾名思义,是指把一个指定的文件包括到源文件中,然后再对源文件进行编译。 文件包含预处理语句的一般格式如下: # include “文件名” 或 # include 〈文件名〉 其中:文件名是磁盘中文本文件的名字。例如磁盘上存在着两个文件:file1.c和file2.c,在file2.c文件的开始有语句:#include “file1.c”,那么在对file2.c进行编译之前,系统会将文件file1.c的内容包含进来代替此语句。 在使用文件包含编译预处理命令时需注意: (1)一个# include命令只能指定一个被包含的文件,包含多个文件时需要使用多个文件包含命令。 (2)文件包含可以嵌套。例如:文件1中包含文件2,文件2中包含文件3,此时只须保证文件2在文件3之前处理即可。 (3)包含命令中的被包含文件的文件名可以用双引号或尖括号括起来。二者的区别是:用双引号时,系统首先在源文件所在的目录中查找要包含的文件,若找不到,再到系统设定的目录中查找。若在双引号中指明文件路径,系统就到指定目录中查找被包含文件;当使用尖括号包围包括文件时,其意义是指示编译系统仅在系统设定的标准目录中搜索包括文件。 (4)被包含文件与源文件在编译处理后已经成为一个文件,因此,如果被包括的文件中有全局变量(包括静态全局变量),则它也在包含文件中有效,不必再用extern说明。 例6-1 文件包含预处理语句的使用 mymath.h的内容如下: # define ADD(x,y) (x+y) # define MUL(x,y) ((x)*(y)) # define PI 3.1415926 # define G 2.718 test.c内容如下: # include “mymath.h” main ( ) { int a=6,b=9; printf(“a+b=%d\n”,ADD(a,b)); printf(“a*b=%d\n”,MUL(a,b)); } 6.2 宏定义 宏定义是一种很重要的编译预处理命令,由#define命令实现,根据实际应用的需要可以分为如下两种形式: 带参数的宏定义、不带参数的宏定义 1.不带参数的宏定义 不带参数的宏定义命令我们在前面已介绍过,它的一般形式为: #define 标识符 字符串 其中: (1)“标识符”是宏名,其作用是用指定的宏名来代替一个指定的字符串,为了与变量名区分一般用大写字母。在编译时程序中所有出现“宏名”的地方,都用该字符串的内容进行替换,此过程称为“宏展开”。 (2)宏定义减少了字符串的书写工作量,易于修改,提高了程序的可移植性。 (3)宏定义末不用分号,否则会将分号当作字符串的一部分一起赋给标识符。 (4)宏名的有效范围为定义命令之后到本源文件的结束或遇到#undef 宏名终止该宏定义。 (5)可以用# undef命令终止宏定义的作用域。 例如: #define PI 3.1415926 main ( ) { …… PI的作用域 } # undef PI f ( ) {……} 在函数f ( )中不能再使用PI。 (6)宏定义可以嵌套,后面定义的宏可以引用前面已定义的宏,层层置换。 例如: #define r 3.0 #define PI 3.1415926 #define c 2.0*PI*r #define s PI*r*r #define v 4.0/3.0*PI*r*r*r (7)如果双引号括起来的字符串内存在与宏名相同的字符也不置换,仅作为字符串的一部分。 (8)宏定义是用于预处理命令的一个专用名词,与定义变量不同,只作字符替换,不分配内存。 例6-2 不带参数的宏定义 #define PI 3.1415926 main ( ) { float c,s,r,v; printf(“input radius:”); scanf (“%f”,r); c=2.0
文档评论(0)