C程序设计第九章.ppt

上传人:b****2 文档编号:2667711 上传时间:2022-11-06 格式:PPT 页数:27 大小:1.22MB
下载 相关 举报
C程序设计第九章.ppt_第1页
第1页 / 共27页
C程序设计第九章.ppt_第2页
第2页 / 共27页
C程序设计第九章.ppt_第3页
第3页 / 共27页
C程序设计第九章.ppt_第4页
第4页 / 共27页
C程序设计第九章.ppt_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

C程序设计第九章.ppt

《C程序设计第九章.ppt》由会员分享,可在线阅读,更多相关《C程序设计第九章.ppt(27页珍藏版)》请在冰豆网上搜索。

C程序设计第九章.ppt

CC程序设计程序设计锦城学院电子系锦城学院电子系刘刘英英第第9章章预处理命令预处理命令E9.1宏定义宏定义E9.2“文件包含文件包含”处理处理E9.3条件编译条件编译预处理预处理指在进行编译的第一遍扫描指在进行编译的第一遍扫描(词法扫描词法扫描和语法分析和语法分析)之前所作的工作。

处理完后自动之前所作的工作。

处理完后自动进入对源程序的编译。

进入对源程序的编译。

标志:

以标志:

以“#”符号开头符号开头例如:

例如:

#include#defineN109.1宏定义宏定义用一个标识符来表示一个字符串,用一个标识符来表示一个字符串,称为称为宏宏。

【例例9.1】使用不带参数的宏定义使用不带参数的宏定义宏宏名,一般大写名,一般大写若不带参数,称若不带参数,称为无参宏为无参宏编译预处理时由编译预处理时由系统自动用系统自动用3.1415926去代去代换,称为换,称为宏展开宏展开或宏代换或宏代换1.无参宏定义的说明无参宏定义的说明一般形式:

一般形式:

#define标识符标识符字符串字符串字符串中可以含任何字符(常数、表达式)。

字符串中可以含任何字符(常数、表达式)。

宏展开时仅以该字符串简单取代宏名,预处理程宏展开时仅以该字符串简单取代宏名,预处理程序对它不作任何检查。

序对它不作任何检查。

宏定义必须写在函数之外,在行末不加分号。

宏定义必须写在函数之外,在行末不加分号。

取消宏定义,使用:

取消宏定义,使用:

#undef宏名宏名例例如:

如:

结果是?

结果是?

59例例如:

如:

#definePI3.1415926intmain(void)#undefPI/*PI/*PI的作用域结束处的作用域结束处*/voidfun1(.).voidfun2(.).上面程序结构表示上面程序结构表示PIPI只在只在mainmain函数中有效,函数中有效,在在fun1fun1和和fun2fun2中无效。

中无效。

宏名在源程序中若用引号括起来,则预处理程序宏名在源程序中若用引号括起来,则预处理程序不对其作宏代换。

例如:

不对其作宏代换。

例如:

#definePI3.1415926intmain(void)/*主函数主函数main(void)*/printf(PI);/*宏宏名名PI用用双双引引号号括括起起来来,不不作作宏宏替替换换*/printf(n);return0;程序运行结果如下:

程序运行结果如下:

宏定义允许嵌套宏定义允许嵌套【例例9.2】在宏定义中引用已定义的宏名在宏定义中引用已定义的宏名2.带参宏定义的说明带参宏定义的说明定义一般形式:

定义一般形式:

#define宏名宏名(形参表形参表)字符串字符串带参宏调用的一般形式为:

带参宏调用的一般形式为:

宏名宏名(实参表实参表);【例例9.3】使用带参数的宏使用带参数的宏实参代替形参实参代替形参带参宏定义中,宏名和形参之间带参宏定义中,宏名和形参之间不不加空格。

加空格。

在带参宏定义中,在带参宏定义中,形式参数不分配内存单元形式参数不分配内存单元,所以不,所以不作类型定义。

作类型定义。

在宏定义中的在宏定义中的形参是标识符形参是标识符,宏调用中的,宏调用中的实实参可以是表达式参可以是表达式。

在宏定义中,字符串内的在宏定义中,字符串内的形参和字符串一般形参和字符串一般都要用括号括起来以避免出错都要用括号括起来以避免出错。

【例例9.3】使用带参数的宏使用带参数的宏能否得到正确的结果?

能否得到正确的结果?

PI*a+b*a+b正确结果正确结果【例例9.3】使用带参数的宏使用带参数的宏100/(PI*(a+b)*(a+b)能否得到正确的结果?

能否得到正确的结果?

100/PI*(a+b)*(a+b)总结:

在宏定义中,字总结:

在宏定义中,字符串内的形参和字符串符串内的形参和字符串一般都要用括号括起来一般都要用括号括起来扩展:

带参的宏和带参函数扩展:

带参的宏和带参函数很相似,但有本质不同很相似,但有本质不同【例例9.4】用宏代表输出格式用宏代表输出格式函数名函数名转义字符转义字符格式说明符格式说明符宏定义宏定义宏名的嵌套宏名的嵌套9.2文件包含文件包含文件包含的两种形式:

文件包含的两种形式:

1.#include“文件名文件名”2.#include:

表示此表示此文件文件为为标准库头文件标准库头文件,查找时从系统,查找时从系统设置的包含文件目录下查找设置的包含文件目录下查找。

“”:

表示此:

表示此文件文件为为用用户编写的文件户编写的文件,查找时从正在编译的程序所在目录下,查找时从正在编译的程序所在目录下查找,若找不到再按标准格式查找查找,若找不到再按标准格式查找文件包含命令的功能文件包含命令的功能:

将指定的头文件插入到此命令行位置取将指定的头文件插入到此命令行位置取代该命令行,从而将指定的代该命令行,从而将指定的头文件头文件和当和当前的前的源程序文件源程序文件连成一个连成一个源文件源文件。

Bfile1.hfile2.c#includeA包包含含AB等等价价于于file2.c【例例9.5】文件包含应用举例文件包含应用举例

(1)将格式宏做成头文件将格式宏做成头文件format.h

(2)主文件主文件file.c注意编译顺序注意编译顺序文件包含是可以嵌套的文件包含是可以嵌套的在一个被包含文件中又可以包含另一个在一个被包含文件中又可以包含另一个被包含文件被包含文件file1.cfile2.c#includefile3.c#include9.3条件编译条件编译一般情况下一般情况下,源程序中所有的行都参加编译。

但源程序中所有的行都参加编译。

但是有时希望是有时希望按不同的条件去编译不同的程序部分按不同的条件去编译不同的程序部分,这就是这就是“条件编译条件编译”。

条件编译产生不同的目标代码文件。

条件编译产生不同的目标代码文件。

这对于程序这对于程序的的移植和调试移植和调试是很有用的。

是很有用的。

条件编译命令一共有三种格式:

条件编译命令一共有三种格式:

1第一种第一种#ifdef、#else和和#endif使用形式使用形式1:

#ifdef标识符标识符程序段程序段1#else程序段程序段2#endif功能:

功能:

如果标识符已被如果标识符已被#define#define命令定义过,则命令定义过,则对程序段对程序段11进行编译;否进行编译;否则对程序段则对程序段22进行编译。

进行编译。

若无程序段若无程序段2(2(它为空它为空),本格式中的本格式中的#else#else可省略。

可省略。

2第二种第二种#ifndef、#else和和#endif格式:

格式:

#ifndef标识符标识符程序段程序段1#else程序段程序段2#endif功能:

功能:

如果标识符未被如果标识符未被#define#define命令定义过,则命令定义过,则对程序段对程序段11进行编译,进行编译,否否则对程序段则对程序段22进行编译。

进行编译。

这这与第一种形式的功能相反。

与第一种形式的功能相反。

若无程序段若无程序段22,本格式中的,本格式中的#else#else可省略。

可省略。

在编写大型程序时,通常将所用到的函数在编写大型程序时,通常将所用到的函数原型、外部变量,全局类型的声明,头文原型、外部变量,全局类型的声明,头文件的包含命令统一编写在一个头文件(比件的包含命令统一编写在一个头文件(比如如alg.h)中,将函数实现统一编写在一个)中,将函数实现统一编写在一个源程序文件(比如源程序文件(比如alg.c)中实现,就像:

)中实现,就像:

主函数主函数main()放在主函数文件放在主函数文件main.c中。

中。

3第第3种种#if、#else和和#endif格式:

格式:

#if常量表达式常量表达式程序段程序段1#else程序段程序段2#endif功能:

功能:

如常量表达式的值为如常量表达式的值为真真(非非0)0),则对程序段,则对程序段11进行进行编译,否则对程序段编译,否则对程序段22进行编进行编译。

因此可以使程序在不同译。

因此可以使程序在不同条件下,完成不同的功能。

条件下,完成不同的功能。

若无程序段若无程序段22,本格式中的,本格式中的#else#else可省略。

可省略。

【例例9.79.7】输入一行字母字符输入一行字母字符,根据需要设置条件编译根据需要设置条件编译,使之能将字母全改为大写输出使之能将字母全改为大写输出,或全改为小写字母输出。

或全改为小写字母输出。

字母全部字母全部大写输出大写输出字母全部字母全部小写输出小写输出

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1