首页计算机计算机软件C语言程序设计 07 第七章 编译预处理.pptx

07 第七章 编译预处理.pptx

页数:9页文件大小:138.2 KB来源: C语言程序设计ppt课件

本课件讲解C语言的编译预处理,先说明预处理的作用、种类与书写格式,再展开不带参数宏定义的作用域、嵌套与括号问题,以及带参数宏定义的展开规则与常见错误写法,随后用表格对比带参宏与函数的区别,最后介绍文件包含的功能、两种形式、嵌套包含与一个完整的编程示例。

第七章编译预处理导览页,列出宏定义文件包含与条件编译三项内容
编译预处理概述页,说明三种预处理命令的种类格式与书写规则
不带参数宏定义页,说明宏展开规则undef终止作用域与加括号的必要性
查看本课件的文字版(共 9 页,供检索与复制)

第1页:第七章编译预处理概述

第七章编译预处理章节封面,标示本章内容包括宏定义、文件包含与条件编译三部分。

第2页:编译预处理的作用与种类

作用:编译程序的一部分,将特殊命令扩展到程序中,生成扩展C源程序。

种类:

  • 宏定义 #define
  • 文件包含 #include
  • 条件编译 #if--#else--#endif

格式:以 # 开头;占单独书写行;语句尾不加分号;定义位置任意,决定其作用域。

第3页:不带参数的宏定义

一般形式:#define 宏名 宏体,用指定标识符代替字符序列。

  • 定义位置任意(一般在函数外面),作用域从定义命令到文件结束
  • #undef 宏名 可终止宏名作用域
  • 宏定义可嵌套,不能递归(#define MAX MAX+10 非法)
  • 引号中与宏名相同的内容不置换
  • 宏体应使用必要的括号
#define PI 3.14159 printf("2*PI=%f\n", PI*2); #define WIDTH 80 #define LENGTH WIDTH + 40 var = LENGTH * 2; 

宏展开在预编译时用宏体替换宏名,不作语法检查。

第4页:带参数的宏定义

一般形式:#define 宏名(参数表) 宏体

  • 宏展开:形参用实参替换,其它字符保留
  • 宏体及各形参外一般应加括号
  • 宏名与括号之间不能加空格,否则变成不带参宏
#define S(a, b) a*b area = S(3, 2); #define POWER(x) x*x z = POWER(x+y); #define POWER(x) ((x)*(x)) z = POWER(x+y); 

第5页:带参宏与函数实现同一功能

例:用带参宏与函数分别求两个整数的最大值

#define MAX(x, y) ((x)>(y) ? (x):(y)) void main() { int a, b, c, d, t; ... t = MAX(a+b, c+d); } 
int max(int x, int y) { return(x>y ? x:y); } void main() { int a, b, c, d, t; ... t = max(a+b, c+d); }

第6页:带参宏与函数的区别

带参宏与函数的区别
比较项目带参宏函数
处理过程不分配内存,简单的字符置换分配内存,先求实参值再代入形参
处理时间编译时程序运行时
参数类型无类型问题实参、形参要做类型检查
程序长度变长不变
运行速度不占运行时间调用和返回占时间

第7页:文件包含的功能与形式

功能:一个源文件可将另一个源文件的全部内容包含进来。

一般形式:#include <文件名> 或 #include "文件名"

  • < > 直接按标准目录搜索
  • " " 先在当前目录搜索,再搜索标准目录,也可指定路径
  • 处理过程:预编译时用被包含文件的内容取代该预处理命令,再对包含后的文件作为一个源文件编译

第8页:被包含文件与嵌套包含

被包含文件内容:源文件(*.c)、头文件(*.h,含宏定义、数据结构定义、函数说明等)。

文件包含可嵌套:file1.c 包含 file2.c,file2.c 又包含 file3.c,预处理后 file1.c 中得到 A、B、C 三部分内容的合并。

第9页:文件包含编程示例

 #define MAX 10 #define sqr(x) ((x)*(x)) #define cube(x) ((x)*(x)*(x)) #define quad(x) ((x)*(x)*(x)*(x)) #include <stdio.h> #include "powers.h" void main() { int n; printf("number\t exp2\t exp3\t exp4\n"); printf("----\t----\t-----\t------\n"); for (n = 1; n <= MAX; n++) printf("%2d\t %3d\t %4d\t %5d\n", n, sqr(n), cube(n), quad(n)); }

调试方法:1、编辑 powers.h 并保存;2、将 powers.h 存放到某一目录下;3、编辑 fmain.c 将其包含进来;4、编译链接产生 fmain.exe;5、执行文件(VC 下运行或直接运行)。

顶部目录