1 / 12
文档名称:

第7章 编译预处理命令.ppt

格式:ppt   页数:12
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

第7章 编译预处理命令.ppt

上传人:管理资源吧 2012/2/7 文件大小:0 KB

下载得到文件列表

第7章 编译预处理命令.ppt

文档介绍

文档介绍:第7章编译预处理
“编译预处理”是C语言编译系统的一个组成部分。编译预处理是在编译前由编译系统中的预处理程序对源程序的预处理命令进行加工。
源程序中的预处理命令均以“#”开头,结束不加分号,以区别源程序中的语句,它们可以写在程序中的任何位置,作用域是自出现点到源程序的末尾。
预处理命令包括执行宏定义(宏替换)、包含文件和条件编译。
1*
宏定义
简单宏定义
定义形式:
#define 宏名串(宏体)
如: #define PI
宏定义的作用
宏定义后, 该程序中宏名就代表了该字符串。
说明
#undef终止宏定义的作用域:
#undef PI
2*
宏定义的嵌套使用
# define R
# define PI
# define L 2*PI*R /*宏体是表达式*/
# define S PI*R*R
main ( )
{ printf ("L=%f\nS=%f\n",L,S); }
程序运行结果如下:L=
S=
双引号内的与宏同名的字母不作宏展开。(见上例)
3*
带参数的宏定义
带参数的宏定义的一般形式:
# define 宏名(参数表) 字符串
如:
#define S (a,b) a*b
#define PR (x) printf("s=%f\n”, x)
带实参的宏名展开时, 宏名被宏体替换, 宏体中的形参按从左到右的顺序被实参替换。
例如: area = S (3,2);
PR(area) ;
赋值语句展开为:area=3*2;
PR(area) 展开的结果是: printf("s=%f\n”, area) ;
4*
宏定义与函数的区别
引用宏只占编译时间,不占运行时间。
引用宏没有返回值。
如: #define squ(n) n*n
main()
{ printf ("%f\n",()); }
程序输出结果为:

5*
3. 宏替换的形参无类型。
4. 实参为表达式:
函数调用是先计算出实参的值, 再将值传递给形参;宏的引用是用表达式替换形参。
例如:
定义:#define S (a,b) a*b
引用: S(a+c,b+c)
展开: a+c*b+c
6*
文件包含
文件包含#include :
一个源文件可以将另一个源文件的全部内容包含进来。
#include命令有两种格式。
(1) #include <文件名>
(2) #include “文件名”
7*
条件编译
控制条件为常量表达式的条件编译
形式一:
#if 常量表达式
程序段
#endif
功能:
常量表达式非0时,程序段被编译。否则程序段不被编译。
形式二:
#if 常量表达式
程序段1
#else
程序段2
#endif
功能:
常量表达式为非0时,程序段1被编译。否则,编译程序段2
8*
嵌套形式:
#if 常量表达式1
程序段1
#elif 常量表达式2
程序段2
......
#elif 常量表达式n
程序段n
#else
程序段n+1
#endif
9*
控制条件为定义标识符的条件编译
1)形式一:
#ifdef 标识符
程序段
#endif
功能:
当标识符在该条件编译结构前已定义过时,程序段被编译。否则,程序段不被编译。
10*