下载此文档

清华大学_C语言_谭浩强_第8章.ppt


文档分类:IT计算机 | 页数:约40页 举报非法文档有奖
1/40
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/40 下载此文档
文档列表 文档介绍
第8章编译预处理
第8章编译预处理
结构体类型的概述
宏定义
文件包含
条件编译
编译预处理命令
1. 编译预处理
2. 编译预处理命令
1. 编译预处理
预处理由专门的预处理程序负责完成。
当对一个源文件进行编译前,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。中间不需要人为干预。
编译预处理是由编译系统中的预处理命令进行的
C语言提供了多种预处理功能,如文件包含、宏定义、条件编译等。
2. 编译预处理命令
编译预处理命令主要有三种,即:宏定义、文件包含、条件编译。
所有的编译预处理命令均以#符号开头,各占用一个单独的书写行,末尾不用分号作结束符。
编译预处理命令可以出现在程序的任何位置,其作用域是自出现的地方开始直到源程序的末尾。
宏定义





所谓无参宏就是宏名后不带任何参数。其定义的一般形式为:
#define 宏名字符串(或数值)
其中的“#”表示这是一条预处理命令, C语言中凡是以“#”开头的命令都为预处理命令。“define”为宏定义命令。
宏定义在使用中应注意以下几点:
(1)宏名的前后应有空格。
(2)宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名。
(3)宏定义命令其后不要跟分号。
(4)字符串(或数值)中如果出现运算符号,则要注意替换后的结果,通常可以在合适的位置加上括号。
宏应用举例。
#define N (8*x+x*x)
/*定义N来替代表达式(8*x+x*x)*/
main()
{ int s,x;
printf("please input a number: ");
scanf("%d",&x);
s=5*N+6*N+7*N; /*宏调用*/
printf("s=%d\n",s);
}
程序的运行情况为:
please input a number:4↙
s=864
分析:上例程序中首先进行宏定义,定义N来替代表达式(8*x+x*x),在s=5*N+6*N+7*N中对N进行了宏调用。经宏展开后该语句变为下面的形式:
s=5*(8*x+x*x)+6*(8*x+x*x)+7*(8*x+x*x);
如果在宏定义中表达式(8*x+x*x)两边的括号没有了,预处理时将会变成:
s=5*8*x+x*x+6*8*x+x*x+7*8*x+x*x;
显然发生了错误,因此加括号和不加括号的意思和答案完全不一样。所以在进行宏定义时必须十分注意。应保证在宏代换之后不发生错误。
(5)宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用
# undef命令。
例如图8-1所示:
#define PI
main()
{

}
#undef PI
hans()
{

}
图8-1种的PI只在main函数中有效,在函数hans中是无效的。

清华大学_C语言_谭浩强_第8章 来自淘豆网m.daumloan.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数40
  • 收藏数0 收藏
  • 顶次数0
  • 上传人化工机械
  • 文件大小0 KB
  • 时间2012-06-18