第13章 编译预处理 宏定义 文件包含 条件编译.

Slides:



Advertisements
Similar presentations
C++语言程序设计教程 第5章 构造数据类型 第6章 C++程序的结构.
Advertisements

无锡商业职业技术学院 机电工程学院党总支孙蓓雄
这是一个数字的 乐园 这里埋藏着丰富的 宝藏 请跟我一起走进数学的 殿堂.
电子成绩单项目实现.
全面了解入党程序 认真履行入党手续 第一讲 主讲人:陈亭而.
中共湖北大学知行学院委员会党校 入党材料规范填写指导 学工处 李华琼 二〇一三年十二月.
云南财经大学2010年党员发展培训—— 党员发展工作培训 校党委组织部 2010年9月17日.
第八章 诉讼法 第一节 诉讼法概述 第二节 民事诉讼法 第三节 行政诉讼法 第四节 刑事诉讼法.
1.1.2 四 种 命 题.
通 知 通知是批转下级机关的公文,转发上级机关和不相隶属机关的公文,传达要求下级机关办理和需要有关单位周知或执行的事项,任免人员时使用的公文。
第4章 选择结构程序设计 在现实生活中,需要进行判断和选择的情况是很多的 如果你在家,我去拜访你 如果考试不及格,要补考
4.3函数 4.3.1函数的概念及定义 1、函数的概念: 可以被其它程序调用具有 特定功能的一段相对独立的 程序(模块),称函数。
高级语言程序设计 主讲人:陈玉华.
第5章 函数与预处理 《 C语言程序设计》 (Visual C++ 6.0环境) 本章导读
第4章 函数与预处理 4.1 概述 4.2 定义函数的一般形式 4.3 函数参数和函数的值 4.4 函数的调用 *4.5 内置函数
Chap 10 函数与程序结构 10.1 函数的组织 10.2 递归函数 10.3 宏定义 10.4 编译预处理.
第五章 选择结构程序设计 一、关系运算符和表达式 1、关系运算符 在程序中经常需要比较两个量的大小关系, 以决定程序下一步
第10章 预处理过程 一、编译预处理指令概述 二、预处理指令 #include 三、#define指令.
第七章 函数 目录 有参的加法函数的开发 函数定义的一般形式 函数参数和函数的值 函数的调用
程序设计专题一 结构化程序设计与递归函数 主讲教师: 刘新国.
QQ: 李祥 QQ: 欢迎多种方式的学习交流,祝大家学有所成.
第7章 编译预处理 本章要求: 本章重点: 本章难点: 掌握用#define定义无参数宏和带有参数宏定义和调用方法;
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
期中考试成绩分布 《程序设计》-2017年秋.
第五章 C/C++及汇编语言的混合编程 5.1 ARM C/C++编译器 5.2 在C/C++程序中内嵌汇编指令
2.1 C语言的数据类型 2.2 常量与变量 2.3 变量赋初值 2.4 各类数值型数据间的混合运算 2.5 C语言的运算符和表达式
第12章 编译预处理 12.1 了解编译预处理 12.2 宏 定 义 12.3 文 件 包 含 12.4 条 件 编 译.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第八章 编译预处理 西安工程大学.
程序设计专题一 结构化程序设计与递归函数 主讲教师: 刘新国.
第6章 预 处 理.
第九章 预处理命令.
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
第8章 编绎和预处理.
C语言概述 第一章.
C语言大学实用教程 第5章 函数与程序结构 西南财经大学经济信息工程学院 刘家芬
$9 泛型基础.
C程序设计 谭浩强 著 清华大学出版社.
第一章 程序设计和C语言 主讲人:高晓娟 计算机学院.
C语言程序示例: 1.输入10个数,按从小到大的顺序排序。 2.汉诺塔问题。.
C语言程序设计 第九章 预处理命令.
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
7.1 C程序的结构 7.2 作用域和作用域规则 7.3 存储属性和生存期 7.4 变量的初始化
第十四章 若干深入问题和C独有的特性 作业: 函数指针 函数作参数 函数副作用 运算 语句 位段 存储类别 编译预处理
C程序设计.
本节内容 字符与字符串 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第一章 C语言概述 教师:周芸.
第4章 Excel电子表格制作软件 4.4 函数(一).
C语言程序设计 李祥 QQ:
目录 8.1 宏定义 8.2 文件包含 8.3 条件编译 1.
第九节 赋值运算符和赋值表达式.
项目1 C程序设计起步 学习目标: 通过该项目你可以知道: C语言的用途。 C语言的基本符号和关键字。 C语言程序的结构及特点。
第6章 预 处 理.
第二章 类型、对象、运算符和表达式.
第8章 编译预处理 所谓编译预处理是指,在对源程序进行编译之前,先对源程序中的编译预处理命令进行处理;然后再将处理的结果,和源程序一起进行编译,以得到目标代码。 8.1 宏定义与符号常量 8.2 文件包含 8.3 条件编译 [Return]
C程序设计.
第二章 基本数据类型 ——数据的表示.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
本节内容 函数嵌套调用的内存布局 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第四章 函数 丘志杰 电子科技大学 计算机学院 软件学院.
第9章 预处理命令.
第7章 模板 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
(5) (-5x)(-7x+2) =__________ (6) 7x(5x2+6x-3) = _______________ -27x2
第五章 逻辑运算和判断选取控制 §5.1 关系运算符和关系表达式
第18讲 从C到C++ 计算机与通信工程学院.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C语言基础学习 从外行到入门.
8的乘法口诀 导入 新授 练习.
Presentation transcript:

第13章 编译预处理 宏定义 文件包含 条件编译

作用:在程序编译之前对程序做一些处理 种类 格式 宏定义 #define 文件包含 #include 条件编译 #if---#else---#end if 格式 以#开头 命令尾不加分号

§13.1 宏定义 一、不带参数的宏定义 一般形式:#define 标识符 字符串 作用:用指定的标识符(宏名)代替字符串 宏名通常用大写字母表示,以于变量名相区别 如 #define YES 1 #define NO 0 #define PI 3.1415926 #define OUT printf("hello!");

说明 宏名定义位置:任意(一般在函数的外部) 宏展开: 预编译时,用字符串替换宏名 ---不作语法检查 宏展开 #define YES 1 #define NO 0 main() { int x; if (x==YES) printf("good!"); else if (x==NO) printf("error!"); } #define YES 1 #define NO 0 main() { int x; if (x==1) printf("good!"); else if (x==0) printf("error!"); } 如错写成#define YES l 宏展开 宏展开if(x== l)

宏展开时,程序中用双撇号括起的字符串内的与宏名相同的字符,不进行置换 #define PI 3.1415926 main(){ printf("PI=%f",PI);} 宏展开后: printf("PI=%f",3.1415926); 宏名作用域:从定义位置开始到本文件结束 用#undef可终止宏名作用域 格式:#undef 宏名 #define YES 1 main() {…… } #undef YES #define YES 0 void max() {…… YES原作用域 YES新作用域

宏定义时可以引用已定义的宏名,层层置换 宏定义中注意括号的使用 宏展开 x=80+40*2; 宏展开 x=(80+40)*2; #define WIDTH 80 #define LENGTH WIDTH+40 main() {int x; x=LENGTH*2; } 宏展开 x=80+40*2; 宏定义中注意括号的使用 #define WIDTH 80 #define LENGTH (WIDTH+40) main() {int x; x=LENGTH*2; } 宏展开 x=(80+40)*2;

二、带参数的宏定义 一般形式:#define 宏名(参数表) 字符串 作用:不只是字符串替换,还包含参数替换 包含参数表中指定的参数 不能加空格 二、带参数的宏定义 一般形式:#define 宏名(参数表) 字符串 作用:不只是字符串替换,还包含参数替换 宏展开:形参用实参换,其它字符不变 #define S (a,b) a*b 相当于定义了无参宏名S,代表字符串"(a,b) a*b" #define S(a,b) a*b main() {float area; area=S(3,2); } 宏展开 area=3*2;

宏体及形参一般应用括号括上 #define MAX(x,y) (x)*(y) #define MAX(x,y) x*y main() {int a,b,c,d,t; …… t=MAX(a+b,c+d); } #define MAX(x,y) x*y main() {int a=3,b=4,c=5,d=6,t; …… t=MAX(a+b,c+d); } 改写成 不同于函数调用 宏展开 宏展开 t=a+b*c+d; t=(a+b)*(c+d);

<例> #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 MIN(x,y) (x)<(y)?(x):(y) main() { int i,j,k; i=10;j=15; k=10*MIN(i,j); printf("%d\n",k); } A.15 B.100 C.10 D.150

#define MAX(x,y) (x)>(y)?(x):(y) ……. main() { int a,b,c,d,t; t=MAX(a+b,c+d); …… } 宏展开:t=(a+b)>(c+d)?(a+b):(c+d); int max(int x,int y) { return(x>y?x:y); { int a,b,c,d,t; t=max(a+b,c+d); ……… <例> 用宏定义和函数实现同样的功能

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

§13.2 “文件包含”处理 功能:一个源文件可以将另一个源文件的内容全部包含进来(可以减少重复劳动) 一般形式:#include "文件名" 或:#include <文件名> 说明: 两种形式的区别: 使用双撇号"": 使用尖括号<>: 系统先在当前目录下查找,在到系统指定的包含文件目录查找 直接到系统指定的包含文件目录查找

处理过程: 预编译时,用被包含文件的内容取代该预处理命令,再对整个文件编译 B B #include "file2.c" file2.c A 在被包含文件中的全局变量在包含文件中也是有效的,不用声明 A file1.c B B file2.c #include "file2.c" A file1.c

被包含文件类型: 源文件(*.c) 头文件(*.h) 文件包含可以嵌套 #include"file3.c" file2.c B C A file1.c

/* powers.h */ #define sqr(x) ((x)*(x)) #define cube(x) ((x)*(x)*(x)) #define quad(x) ((x)*(x)*(x)*(x)) /*ch8_10.c*/ #include <stdio.h> #include "d:\fengyi\bkc\powers.h" #define MAX_POWER 10 void main() { int n; printf("number\t exp2\t exp3\t exp4\n"); printf("----\t----\t-----\t------\n"); for(n=1;n<=MAX_POWER;n++) printf("%2d\t %3d\t %4d\t %5d\n",n,sqr(n),cube(n),quad(n)); } <例> 文件包含举例

§9.3 条件编译 条件编译:对文件的一部分内容只有在满足一定的条件才进行编译 形式: #ifndef 标识符 #if 表达式 程序段1 形式1: 形式2 形式3 #ifdef 标识符 程序段1 #else 程序段2 #endif #ifndef 标识符 程序段1 #else 程序段2 #endif #if 表达式 程序段1 #else 程序段2 #endif 说明1:若标识符被定义过,则编译程序段1,否则编译程序段2,这种形式正好与形式2相反。 说明2:当指定的表达式值为真就编译程序段1,否则编译程序段2

例:输入一行字母,根据需要设置条件编译,使之能将字母全改为大写或全改为小写。 #define LETTER 1 main() { char str[20]=“CLanguage”,c; int i; i=0; while((c=str[i]!=‘\0’) {i++; #if LETTER if(c>=‘a’&&c<=‘z’) c=c-32; #else if(c>’A’&&c<=‘Z’) c=c+32 #endif printf(“%c”,c); } 条件 编译