第9章 预处理命令.

Slides:



Advertisements
Similar presentations
2.5 函数的微分 一、问题的提出 二、微分的定义 三、可微的条件 四、微分的几何意义 五、微分的求法 六、小结.
Advertisements

电子成绩单项目实现.
6.4 字符串与指针 1. 用字符数组存放一个字符串.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
4.3函数 4.3.1函数的概念及定义 1、函数的概念: 可以被其它程序调用具有 特定功能的一段相对独立的 程序(模块),称函数。
第5章 函数与预处理 《 C语言程序设计》 (Visual C++ 6.0环境) 本章导读
第八章 函数 §8.1 概述 一个较大程序一般分为若干个程序模块,每一个模块实现一个特定的功能。所有的高级语言中都有子程序的概念,在C中子程序就是函数。 一个C程序可由一个主函数和若干个函数构成,由主函数调用其它函数,其它函数也可以相互调用.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第13章 编译预处理 宏定义 文件包含 条件编译.
C语言高级编程(第四部分) 字符串 北京大学 信息科学技术学院.
第10章 预处理过程 一、编译预处理指令概述 二、预处理指令 #include 三、#define指令.
前處理指令可以要求前處理器 (preprocessor) 在程式編譯之前,先進行加入其它檔案的內容、文字取代以及選擇性編譯等工作。
程序设计专题一 结构化程序设计与递归函数 主讲教师: 刘新国.
辅导课程六.
第7章 编译预处理 本章要求: 本章重点: 本章难点: 掌握用#define定义无参数宏和带有参数宏定义和调用方法;
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
期中考试成绩分布 《程序设计》-2017年秋.
第一章 C++基础.
第二章 Java语言基础.
第12章 编译预处理 12.1 了解编译预处理 12.2 宏 定 义 12.3 文 件 包 含 12.4 条 件 编 译.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第八章 编译预处理 西安工程大学.
程序设计专题一 结构化程序设计与递归函数 主讲教师: 刘新国.
第6章 预 处 理.
第九章 预处理命令.
SOA – Experiment 2: Query Classification Web Service
第一章 函数与极限.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第8章 编绎和预处理.
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
$9 泛型基础.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C程序设计 谭浩强 著 清华大学出版社.
程序设计基础A(C语言) 主讲教师: 许 康 教师主页:
姚金宇 MIT SCHEME 使用说明 姚金宇
Oop8 function函式.
C语言程序设计 第九章 预处理命令.
第十四章 若干深入问题和C独有的特性 作业: 函数指针 函数作参数 函数副作用 运算 语句 位段 存储类别 编译预处理
第4章 Excel电子表格制作软件 4.4 函数(一).
C语言程序设计 李祥 QQ:
第七单元 应用函数程序设计 从现在开始,将详细讲述C语言的方方面面。第一章中的所有疑惑,都将一一消灭。
目录 8.1 宏定义 8.2 文件包含 8.3 条件编译 1.
第3章 数据类型、运算符与表达式.
第九节 赋值运算符和赋值表达式.
3.1 变化率与导数   3.1.1 变化率问题 3.1.2 导数的概念.
第6章 预 处 理.
3.16 枚举算法及其程序实现 ——数组的作用.
第8章 编译预处理 所谓编译预处理是指,在对源程序进行编译之前,先对源程序中的编译预处理命令进行处理;然后再将处理的结果,和源程序一起进行编译,以得到目标代码。 8.1 宏定义与符号常量 8.2 文件包含 8.3 条件编译 [Return]
C程序设计.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
2.6 字符型数据 一、 字符常量 1、字符常量的定义 用一对单引号括起来的单个字符,称为字符常量。 例如,‘A’、‘1’、‘+’等。
第7章 模板 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
_03宽字符与Unicode编程 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
第五章 逻辑运算和判断选取控制 §5.1 关系运算符和关系表达式
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第18讲 从C到C++ 计算机与通信工程学院.
第四章 UNIX文件系统.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
THE C PROGRAMMING LANGUAGE
计算机编程 信息管理与工程学院 2014年9月.
Presentation transcript:

第9章 预处理命令

本 章 内 容 宏定义 "文件包含"处理 条件编译

9.1 宏定义 基本概念 预处理命令 由ANSI C统一规定,不是C语言本身的组成部分。 预处理的实现 宏定义 文件包含 条件编译

9.1 宏定义 不带参数的宏定义 一般形式: #define 标识符 字符串 例如: #define PI 3.1415926 说明 宏名一般用大写字母表示,以便与变量名相区别。 宏定义是用宏名代替一个字符串,只作简单的置换,不作正确性检查。 宏定义不是C语句,不必在行末加分号。 #define命令应放在程序中函数的外面,有效范围为定义命令之后到本源文件结束。 可以用#undef命令终止宏定义的作用域。 在进行宏定义时,可以引用已定义的宏名,可以层层置换。(例9.2) 对程序中用双引号括起来的字符串内的字符,即使与宏名相同,也不进行置换。 宏定义与定义变量的含义不同,不分配内存空间。

9.1 宏定义 带参数的宏定义 一般形式 #define 宏名(参数表) 字符串 例如: #define S(a, b) a*b area = S(2, 3); 宏定义的展开:实参与虚参相对应,从左到右进行置换。 例9.3: 如果有语句:area = S(a+b);分析程序正误? #define PI 3.1415926 #define S(r) PI*r*r main() { float a, area; a = 3.6; area = S(a); printf("%f, %f", a, area); }

9.1 宏定义 说明 带参的宏定义,在定义时,在字符串中的形式参数外面加一个括号。 在宏定义时,在宏名与带参数的括号之间不应加空格,否则将空格以后的字符都作为替代字符串的一部分。 带参的宏定义与函数的不同 函数调用时,先求出实参表达式的值,然后代入形参。而使用带参的宏只是进行简单的字符替换。 函数调用在程序运行时处理,为形参分配临时的内存单元。而宏展开是在编译时进行,不分配内存单元,不进行值的传递处理,也没有"返回值"的概念。 函数中的实参和形参都有相应的类型定义。而宏不存在类型问题,宏名无类型,它的参数也无类型。 调用函数只可得到一个返回值,而用宏可以得到几个结果。

9.1 宏定义 例 9.4: 宏展开后源程序增长,而函数调用不使源程序变长。 宏替换不占运行时间,只占编译时间。而函数调用则占运行时间。 对一些简短的功能实现,用宏和函数都可以。 例9.5(略) #define PI 3.1415926 #define CIRCLE(R, L, S) L=2*PI*R; S=PI*R*R main() { float r, l; scanf("%f", &r); CIRCLE(r, l); printf("%6.2f, %6.2f, %6.2f", r, l, s); }

9.2 文件包含处理 文件包含 一个源文件可以将另一个源文件的全部内容包含进来,称为文件包含。 命令形式 #include "文件名" 或 file1.c file2.c file1.c 编译时两个文件作为一个源程序进行编译,得到一个目标文件。 #include<file2.c> A B

9.2 文件包含处理 说明: 一个#include命令只能指定一个被包含文件。 如果文件1包含文件2,而文件2中要用到文件3的内容,则在文件1中有: #include "file3.h" #include "file2.h" 文件包含可以嵌套。 file1.c file2.c file3.c 两种文件包含形式的区别(P196) 尖括号 系统到存放C库函数头文件所在的目录中寻找要包含的文件,称为标准方式。 双撇号 系统先在用户当前目录中寻找要包含的文件,若找不到,再按标准方式查找。若文件不在当前目录中,双撇号内可给出文件路径。 #include "file2.c" … #include "file3.c"

9.3 条件编译 条件编译 指定编译的条件,仅对部分内容进行编译,称为条件编译。 条件编译命令的几种形式: (1) 例如: #define DEBUG ... #ifdef DEBUG printf("x=%d", x); #else printf("y=%d", y); #endif #ifdef 标识符 程序段1 #else 程序段2 #endif 说明: #else 部分可以省略。 程序段可以是语句组也可以是命令行。

9.3 条件编译 (3) (2) #if 表达式 #ifndef 标识符 程序段1 程序段1 #else #else 程序段2 程序段2 #endif (3) #if 表达式 程序段1 #else 程序段2 #endif

9.3 条件编译 #define LETTER 1 main() { char str[20] = "C Language", 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); } 条件编译的好处 减少被编译的语句,从而减少目标程序的长度,减少运行时间。

作 业 P111 9.3 9.5 9.6