第09章C语言高级程序设计.ppt

  1. 1、本文档共83页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第09章C语言高级程序设计

C语言程序设计 湖南工学院 第9章 C语言高级程序设计 9.1 编译预处理命令 9.2 位运算 9.3 结构体高级应用-链表 本章小结 9.1 编译预处理命令 ANSI C 标准规定可以在C源程序中加入一些“预处理命令”,以改进程序环境,提高编程效率。C程序中编译预处理语句的作用不是实现程序的功能,它们是发送给编译系统的信息。也就是说,对于预处理命令,必须在程序编译之前,先对这些特殊命令进行“预处理”。经过预处理后程序不再包含预处理命令了。 C语言提供的预处理功能主要有宏定义、文件包含及条件编译三种。 分别用宏定义命令,文件包含命令,条件编译命令来实现。为了与一般C语句相区别,这些命令以符号“#”开头。 9.1.1 宏 宏定义功能是定义符号常量和常参数的宏,宏定义编译预处理语句的格式如下 : #define 字符串1 字符串2 它把字符串1定义为字符串2,字符串1称为字符串2的宏定义,例如,下面是符号常量的宏定义: #define ON 1 #define OFF 0 它把符号常量ON定义为1,OFF定义为0。符号常量经过宏定义后,就可以在程序中作为常量使用。例如: if(a==ON) printf(“Switch is ON\n”); else if(a==OFF) printf(“Switch is OFF\n”); 在系统执行编译预处理过程时,将把程序中出现的字符串1一律用字符串2置换,就是说程序中的符号常量用定义它们的常量置换,然后再对置换处理后的源文件进行编译。如上面程序段经编译预处理后成为下列形式: if(a==1) printf(“Switch is ON\n”); else if(a==2) printf(“Switch is OFF\n”); 在宏定义语句中,可以使用已经定义过的符号常量定义新的符号常理。例如: #define WID 40 #define LEN (WID+20) 其中第二个宏定义中使用了第一个宏定义的符号常量WID。在执行编译预处理时,程序中出现的所有符号常量WID都将被40置换,所有的符号常量LEN 都将被(40+20)置换。例如,程序中的下列语句: area=LEN*WID; 在执行编译预处理时,该语句将被置换成: area=(40+20)*40; 经运算后变量area的值是2400。从上面的置换过程可以看到,LEN定义时包围WID+20的圆括号是不可缺少的,若上面的宏定义时不使用圆括号: #define LEN WID+20 则上面的area赋值表达式在编译预处理后成为: area=40+20*40; 这时变量area的计算结果值是840,它并不是预定的计算结果。因此,在进行宏定义时,为了保证宏定义被置换后仍保持正确的运算顺序,经常在定义式中使用必要的圆括号包围定义的式子。 在C语言程序中,宏定义语句除了定义符号常量外,还经常用于定义带参数的宏,带参数的宏是在定义的宏定义中可以带有若干参数。例如: #define MULT2(X) X*X 其中,MULT2(X)称为带参数的宏,X是它的形式参数。该宏定义把MULT2(X)定义为X*X。在此定义后,MULT2(X)就可以用在程序中代替定义它的运算表达式X*X。它的形式参数的使用特性类似于函数的形式参数。在程序中需要计算某个数的平方值时,可以使用这个已定义 的宏,例如: a=10; c=MULT2(a); 在进行编译预处理时,带参数的宏用它的定义置换,其中的形式参数用实际使用的实际参数置换。因此,上面的赋值表达式置换后的形式是: c=a*a; 其中定义式中的形式参数X被实际参数a置换,该运算表达式的结果是100。当程序中需要计算某两个变量和的平方时,如果使用上面定义的带参数的宏的话,如下所示: w=6;v=4; c=MULT2(w+v); 进行编译预处理后,上面的赋值表达式置换后的形式是: c=w+v*w+v; 它的运算顺序与预定的顺序完全不同,计算结果是34。如果上面的宏定义改为下列形式: #define MULT2(X) (X)*(X) 上面的赋值表达式置换后就成为: c=(w+v)*(w+v); 它的运算结果就正确了。这里又一次看到在定义式中使用必要圆括号的重要性。 【例9.1】程序中的

文档评论(0)

bm5044 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档