页数:9页文件大小:138.2 KB来源: C语言程序设计ppt课件
本课件讲解C语言的编译预处理,先说明预处理的作用、种类与书写格式,再展开不带参数宏定义的作用域、嵌套与括号问题,以及带参数宏定义的展开规则与常见错误写法,随后用表格对比带参宏与函数的区别,最后介绍文件包含的功能、两种形式、嵌套包含与一个完整的编程示例。
第七章编译预处理章节封面,标示本章内容包括宏定义、文件包含与条件编译三部分。
作用:编译程序的一部分,将特殊命令扩展到程序中,生成扩展C源程序。
种类:
#define#include#if--#else--#endif格式:以 # 开头;占单独书写行;语句尾不加分号;定义位置任意,决定其作用域。
一般形式:#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; 宏展开在预编译时用宏体替换宏名,不作语法检查。
一般形式:#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); 例:用带参宏与函数分别求两个整数的最大值
#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); }| 比较项目 | 带参宏 | 函数 |
|---|---|---|
| 处理过程 | 不分配内存,简单的字符置换 | 分配内存,先求实参值再代入形参 |
| 处理时间 | 编译时 | 程序运行时 |
| 参数类型 | 无类型问题 | 实参、形参要做类型检查 |
| 程序长度 | 变长 | 不变 |
| 运行速度 | 不占运行时间 | 调用和返回占时间 |
功能:一个源文件可将另一个源文件的全部内容包含进来。
一般形式:#include <文件名> 或 #include "文件名"
被包含文件内容:源文件(*.c)、头文件(*.h,含宏定义、数据结构定义、函数说明等)。
文件包含可嵌套:file1.c 包含 file2.c,file2.c 又包含 file3.c,预处理后 file1.c 中得到 A、B、C 三部分内容的合并。
#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 下运行或直接运行)。
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}