第九章预编译处理 主讲福州大学数学与计算机学院韩晓芸 E-mail: hxy afjtv net
1 第九章 预编译处理 主讲 福州大学数学与计算机学院 韩晓芸 E-mail: hxy@fjtv.net
第九章编译预处理 第一节编译预处理概述 第二节宏定义 第三节文件包含 第四节亲件编译
2 第九章 编译预处理 • 第一节 编译预处理概述 • 第二节 宏定义 • 第三节 文件包含 • 第四节 条件编译
译减公理概 什么是C预处理程序 门预处理命令
3 第一节 编译预处理概述 什么是C预处理程序 预处理命令
郭一节编译预处狸概述 什么是C预处理程序 在用C编译程序对C源代码进行编译之前, 即在语法分析、代码生成和优化之前,由C 预处理程序对源代码进行第一次处理。处理 时,它忽略注释语句,加入.h头文件,并按定 义进行替换。预处理的输出,即是编译程序 的输入 预处理的过程
4 在用C编译程序对C源代码进行编译之前, 即在语法分析、代码生成和优化之前,由C 预处理程序对源代码进行第一次处理。处理 时,它忽略注释语句,加入.h头文件,并按定 义进行替换。预处理的输出,即是编译程序 的输入。 什么是C预处理程序 第一节 编译预处理概述 预处理的过程
源文件 预处理程序 头文件 pro. c stdio. h 编译程序 预处理过程 目标文件 pro. obj 连接程序 目标文件 可执行程序 库 mISc. obJ p ro.exe slice.lib
5 源文件 pro.c 预处理程序 头文件 stdio.h 编译程序 目标文件 pro.obj 连接程序 可执行程序 pro.exe 目标文件 misc.obj 库 slibce.lib 预处理过程
郭一节编邙预处理概述 预处理命令 预处理命令共有十二条,分为五类: 宏定义 文件包含 条件编译 行号和文件名控制 其它 这里介绍宏定义、文件包含和条件编译。为 了与一般C语句相区别这些命令以符号“#”开 头
6 预处理命令共有十二条,分为五类 : – 宏定义 – 文件包含 – 条件编译 – 行号和文件名控制 – 其它 这里介绍宏定义、文件包含和条件编译。为 了与一般C语句相区别,这些命令以符号“#”开 头。 第一节 编译预处理概述 预处理命令
不带参数的宏定义 6带参数的宏定义 6宏与函数 门取消宏定义 个
7 不带参数的宏定义 带参数的宏定义 宏与函数 取消宏定义 第二节 宏定义
第二节宏定义 不带参数的宏定义 不带参数的宏定义的一般形式为: # define标识符字符串 用一个指定的标识符(即名字)来代表 个字符串,也是定义符号常量的形式, 如见过的: #define pi 3.14159 #define taX rate 0.0825
8 不带参数的宏定义的一般形式为: #define 标识符 字符串 用一个指定的标识符(即名字)来代表 一个字符串,也是定义符号常量的形式, 如见过的: #define PI 3.14159 #define TAX_RATE 0.0825 不带参数的宏定义 第二节 宏定义
第二节宏定义 不带参数的宏定义 例1: ·# define pi3.1415926 ° mainO 运行情况如下: Float l, s, r,v; nput radius. printf( input radius: ) l=25.1327 scanf(%f &r); s=50.2655 =2.0PIxr v=268.0826 s=Prior v=4.0/. printf(l-=%10.fns=%10.4fnv=%104fn", S, v);
9 例1: • #define PI 3.1415926 • main() • {float l,s,r,v; • printf("input radius:"); • scanf("%f",&r); • l=2.0*PI*r; • s=PI*r*r; • v=4.0/3*PI*r*r*r; • printf("l=%10.4f\ns=%10.4f\nv=%10.4f\n",l,s,v); • } 不带参数的宏定义 第二节 宏定义 运行情况如下: input radius: 4 l=25.1327 s=50.2655 v=268.0826
第二节宏定义 不带参数的宏定义 说明: 1.宏名一般习惯用大写字母,以便与变量名区别 2.使用宏名代替一个字符串,可以减少重复书写 某些字符串的工作量 3.宏定义只做简单的置换,不作正确性检查 4.宏定义不是C语句,不必在行末加分号 5.# define命令出现在程序中函数的外面,其有 效范围从定义命令之后到本源文件结束 6.可以用# undef命令终止宏定义的作用域
10 说明: 1. 宏名一般习惯用大写字母,以便与变量名区别 2. 使用宏名代替一个字符串,可以减少重复书写 某些字符串的工作量 3. 宏定义只做简单的置换,不作正确性检查 4. 宏定义不是C语句,不必在行末加分号 5. #define命令出现在程序中函数的外面,其有 效范围从定义命令之后到本源文件结束 6. 可以用#undef命令终止宏定义的作用域 不带参数的宏定义 第二节 宏定义