C语言 编译预处理.ppt_第1页
C语言 编译预处理.ppt_第2页
C语言 编译预处理.ppt_第3页
C语言 编译预处理.ppt_第4页
C语言 编译预处理.ppt_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第10章 编译预处理,编译预处理,文件包含 宏定义 条件编译,10.1 文件包含,命令的一般形式 格式1: #include 格式2: #include 文件名,文件包含是将指定的某个源文件的内容全部包含到当前文件中。用include命令实现。,格式1:预处理程序仅在C所在目录下查找指定文件 格式2:预处理程序首先在当前目录中查找指定文件 若找不到再到C所在目录中查找。,#define 宏名 字符串,宏定义的功能: 在进行编译前,用字符串原样替换程序中的宏名。 这个替换过程称为“宏替换”或“宏展开”,字符串也称为替换文本。,一般格式:,10.2 不带参数的宏定义,#define PI 3.14

2、 #define S PI*r*r #define V 4*S*r/3 main( ) float r; printf(nInput r:); scanf(%f, ,宏定义的作用域是从定义处开始到源文件结束, 但根据需要可用undef命令终止其作用域。形式为:,#undef 宏名,#define YES 1 main() printf(%d,YES); max(); #undef YES #define YES 0 max() printf(%d,YES); ,定义形式:,#define 宏名(形参表) 字符串,功能: 用宏名后圆括号中的实参替换字符串中的形参 把源程序中所有带参数的宏名用宏定

3、义中的字符串替换,10.3 带参数的宏定义,不能加空格,#define S(a,b) a*b . area=S(3,2); 宏展开: area=3*2;,引用形式:,宏名(实参表),#define S (r) PI*r*r 相当于定义了不带参宏S,代表字符串“(r) PI*r*r”,例: #define POWER(x) x*x x=4; y=6; z=POWER(x+y); 宏展开: z=x+y*x+y; 一般写成: #define POWER(x) (x)*(x) 宏展开:z=(x+y)*(x+y);,形参用实参换,其它字符保留, 宏体及各形参外一般应加括号(),练习: #define M

4、A(x) x*(x-1) main( ) int a=1,b=2; printf(%dn, MA(1+a+b); ,输出结果:8,注意:带参数的宏定义与函数是不同的!,函数调用是在运行时处理的,先求表达式的值,然后代入临时分配的形参, 有类型问题有返回值。 函数调用不改变源程序。 宏展开则是在预编译时进行的,只将实参字符置换对应的形参,不分配单元,不进行值的传递,没有类型问题, 也无返回值的概念。 宏展开后源程序发生变化。 本质上宏展开仅仅是字符序列的替换,由编译系统对替换后字符序列进行解释和语法检查,只占编译时间。,格式1: #ifdef 标识符 程序段 1 #else 程序段 2 #end

5、if,10.4 条件编译,若所指定的标识符已经被#define定义,则编译程序段1,否则编译程序段2,#include #define MA 1 main( ) int a=10; #ifdef MA a=a-10; printf(%dn,a); #else a=a+10; printf(%dn,a); #endif ,输出结果:0,0,10.4 条件编译,格式2: #ifndef 标识符 程序段 1 #else 程序段 2 #endif,若所指定的标识符未被#define定义,则编译程序段1,否则编译程序段2,#include #define MA 1 main( ) int a=10; #ifndef MA a=a-10; printf(%dn,a); #else a=a+10; printf(%dn,a); #endif ,输出结果:20,/#define MA 1,输出结果:0,10.4 条件编译,格式3: #if 常量表达式 程序段 1 #else 程序段 2 #endif,若常量表达式非0,则编译程序段1,否则编译程序段2,#include #define LE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论