- 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语言 第8章 编译预处理
8.1 宏定义 定义: 在C语言源程序中允许用一个标识符来表示一个字符串, 称为“宏”。被定义为“宏”的标识符称为“宏名”。 如宏定义: #define PI 3.14159 其中: PI就是宏名. 在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换, 这称为“宏代换”或“宏展开”。 如:在程序中出现 s=PI*r*r时,PI就用3.14159代换. 8.1.1 不带参数的宏定义 d. 宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令。 一个include命令只能指定一个被包含文件, 若有多个文件要包含,则需用多个include命令。 本章小结 1. 预处理功能是C语言特有的功能,它是在对源程序正式编译前由预处理程序完成的。程序员在程序中用预处理命令来调用这些功能。 2. 宏定义是用一个标识符来表示一个字符串,这个字符串可以是常量、变量或表达式。在宏调用中将用该字符串代换宏名。 3. 宏定义可以带有参数,宏调用时是以实参代换形参。而不是“值传送”。 4. 为了避免宏代换时发生错误,宏定义中的字符串应加括号,字符串中出现的形参两边也应加括号。 5. 文件包含是预处理的一个重要功能,它可用来把多个源文件连接成一个源文件进行编译,结果将生成一个目标文件。 6. 条件编译允许只编译源程序中满足条件的程序段,使生成的目标程序较短,从而减少了内存的开销并提高了程序的效率。 7. 使用预处理功能便于程序的修改、阅读、移植和调试,也便于实现模块化程序设计。 * * 第8章 编译预处理 本章内容: 本章重点: 本章课时: 宏定义 “文件包含”处理 条件编译 宏定义的方法 “文件包含”的含义 1 作用:对源程序编译之前做一些处理,生成扩展C源程序 种类 宏定义 #define 文件包含 #include 条件编译 #if--#else--#endif等 格式:为了与一般C语句相区别,这些命令: “#”开头 占单独书写行 行尾不加分号 编译预处理: 宏定义是由源程序中的宏定义命令完成的。 宏代换是由预处理程序自动完成的。 在C语言中,“宏”分为有参数和无参数两种。 “#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令 “define”为宏定义命令 “标识符”为所定义的宏名 “字符串”可以是常数、表达式、格式串等 无参宏定义 :宏名后不带参数。 其定义的一般形式为:#define 标识符 字符串 P121 例8.1 自看 #define PI 3.14l59 小写字母l 说明: a.习惯上宏名用大写字母表示,以便于与变量区别。但也允许用小写字母。 b. 用宏名代替一串字符,只作简单的置换,不作正确性检查。如有错误,只能在编译已被宏展开后的源程序时发现。 c.定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。 如:#define PI 3.14159; … s=PI*r*r; … 宏展开时:s=3.14159;*r*r; 编译时出错. 例 #define YES 1 main() { …….. } #undef YES #define YES 0 max() {…….. } YES原作用域 YES新作用域 例 #define PI 3.14159 printf(“2*PI=%f\n”,PI*2); 宏展开:printf(“2*PI=%f\n”,3.14159*2); e. 宏名在源程序中若用引号括起来,则预处理程序不对其作宏代换。 f.用宏名代替一串字符,可减少工作量,一改全改。 如:对“输出格式”作宏定义,可以减少书写麻烦。 #define P printf #define D %d\n main() {int a=5; P(D ,a);} 8.1.2带参数宏定义 定义的一般形式:#define 宏名(形参表) 字符串 调用的一般形式:宏名(实参表); 例 #define S(a,b) a*b \*宏定义*\ ……….. area=S(3,2); \*宏调用*\ area=3*2; \*宏展开*
文档评论(0)