第九讲编译预处理.pptVIP

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九讲编译预处理

第九讲 编译预处理;主要内容;9.1 宏定义与符号常量;9.1.1 无参宏定义;;[例1] 宏替换的应用;3.说明 (1)宏名一般用大写字母表示,以示与变量区别。 (2)宏定义不是C语句,所以不能在行尾加分号。 (3)在宏展开时,预处理程序仅以按宏定义简单替换宏名,而不作任何检查。如果有错误,只能由编译程序在编译宏展开后的源程序时发现。 (4)宏定义命令#define出现在函数的外部,宏名的有效范围是:从定义命令之后,到本文件结束。通常,宏定义命令放在文件开头处。 (5)在进行宏定义时,可以引用已定义的宏名 。 (6)对双引号括起来的字符串内的字符,即使与宏名同名,也不进行宏展开。 ;9.1.2 符号常量;符号常量示例;[例2] 输入圆的半径,求圆的周长、面积和球的体积。要求使用无参宏定义圆周率。;9.1.3 有参宏定义;有参宏定义示例;有参宏定义实例;例5:宏定义与函数调用的区别 #define SQ2(y) ((y)*(y)) //宏定义 SQ1(int y) //函数定义 { return ((y)*(y)); } void main() { int i=1,j=1; while (i=10) printf(“%d\t”,SQ1(i++)); while(j=10) printf(“%d\t”,SQ2(j++)); } ;3.说明 (1)定义有参宏时,宏名与左圆括号之间不能留有空格。否则,C编译系统将空格以后的所有字符均作为替代字符串,而将该宏视为无参宏。 (2)有参宏的展开,只是将实参作为字符串,简单地置换形参字符串,而不做任何语法检查。在定义有参宏时,在所有形参外和整个字符串外,均加一对圆括号。 ;有参宏与有参函数的区别;9.2 文件包含;3.文件包含的用途 一个大程序,通常分为多个模块,并由多个程序员分别编程。有了文件包含处理功能,就可以将多个模块共用的数据(如符号常量和数据结构)或函数说明,集中到一个单独的文件中。这样,凡是要使用其中数据或调用其中函数的程序员,只要使用文件包含处理功能,将所需文件包含进来即可,不必再重复定义它们,从而减少重复劳动。;4.说明 (1)编译预处理时,预处理程序将查找指定的被包含文件,并将其复制到#include命令出现的位置上。 (2)常用在文件头部的被包含文件,称为“标题文件”或“头部文件”,常以“h”(head)作为后缀,简称头文件。在头文件中,除可包含宏定义外,还可包含外部变量定义、结构类型定义等。 (3)一条包含命令,只能指定一个被包含文件。如果要包含n个文件,则要用n条包含命令。 (4)文件包含可以嵌套,即被包含文件中又包含另一个文件。;5. 头文件的定义与使用 用户显式地保证程序一致性的基本方法是保持声明的一致性。 保持声明一致性的简单办法是提供一个头文件,让头文件中的信息作为各模块之间的接口信息,有利于提供可重用的模块。 使用头文件将把程序分为程序头和程序体两部分。;好的头文件应该包括:;好的头文件不能包含以下内容: ·一般函数定义 ·数据定义,如int a; ·常量聚集定义,如 const tbl[]={/* … */}; ;9.3 条件编译;9.3.1 #ifdef ~ #endif命令;示例6;9.3.2 #ifndef ~ #endif命令;例7:#define NUM 10 struct stu{int num; char *name; }; #define STUDENT struct stu main() { STUDENT *p; p=(STUDENT *)malloc(sizeof(STUDENT)); p-num=6688; p-name=“Li Jie”; #ifndef NUM printf(“Number=%d\n”,p-num); #else printf(“Name=%s\n”,p-name); #endif free(p); };9.3.2 #if ~ #endif;例8: 输入一个

文档评论(0)

jdy261842 + 关注
实名认证
文档贡献者

分享好文档!

1亿VIP精品文档

相关文档