第三章嵌入式C语言概述.ppt-大连理工大学精品课程.ppt
嵌入式系统程序设计 大连理工大学软件学院 嵌入式系统工程系 赖晓晨 C/C++语言摘要 C语言的历史和特点 预处理程序 位运算 函数指针 C程序的移植 一、C语言的历史和特点 C语言的历史 C语言的特点 C语言的优良特性 结构化语言,代码数据分离 包含指针特性,允许对地址操作 语法简洁紧凑,但功能强大 编程方便,运行速度快 支持分离编译 C语言的缺点 封装性不如C++,数据安全性上有缺陷 类型检查机制相对薄弱 指针的操作带来许多不安全因素 比其他高级语言较难掌握 二、预处理程序 C89规定的预处理指令有以下几条 #if #ifdef #ifndef #else #elif #endif 预处理语句的书写规则 作用:对源程序编译之前做一些处理,生成扩展C源程序 格式: “#”开头 占单独书写行 语句尾不加分号 1. 宏定义 不带参数宏定义 一般形式: #define 宏名 [宏体] 功能:用指定标识符(宏名)代替字符序列(宏体) 1. 宏定义 不带参数宏定义 一般形式: #define 宏名 [宏体] 功能:用指定标识符(宏名)代替字符序列(宏体) 1. 宏定义 不带参数宏定义 一般形式: #define 宏名 [宏体] 功能:用指定标识符(宏名)代替字符序列(宏体) 1. 宏定义 不带参数宏定义 一般形式: #define 宏名 [宏体] 功能:用指定标识符(宏名)代替字符序列(宏体) 1. 宏定义 不带参数宏定义 一般形式: #define 宏名 [宏体] 功能:用指定标识符(宏名)代替字符序列(宏体) 1. 宏定义 不带参数宏定义 一般形式: #define 宏名 [宏体] 功能:用指定标识符(宏名)代替字符序列(宏体) 1. 宏定义 不带参数宏定义 一般形式: #define 宏名 [宏体] 功能:用指定标识符(宏名)代替字符序列(宏体) 1. 宏定义 不带参数宏定义 一般形式: #define 宏名 [宏体] 功能:用指定标识符(宏名)代替字符序列(宏体) 1. 宏定义 不带参数宏定义 一般形式: #define 宏名 [宏体] 功能:用指定标识符(宏名)代替字符序列(宏体) 1. 宏定义 不带参数宏定义 一般形式: #define 宏名 [宏体] 功能:用指定标识符(宏名)代替字符序列(宏体) 带参数宏定义 一般形式: #define 宏名(参数表) 宏体 带参数宏定义 一般形式: #define 宏名(参数表) 宏体 带参的宏与函数区别 Embest开发环境中的宏定义 44b.h有44B0X中各个特殊功能寄存器的宏定义 预定义宏 C89规范了五个固有的预定义宏,分别为: __LINE__:行号 __FILE__:文件名 __DATE__:日期 __TIME__:时间 __STDC__:1-标准C编译器 0-非标准C编译器 预定义宏 功能:对源程序中的一部分内容只有满足某种条件的情况下才进行编译。 #ifdef 标识符 程序段1 #else 程序段2 #endif 可以用来提高程序的可移植性 可以用来调试程序 #ifndef 标识符 程序段1 #else 程序段2 #endif #if 表达式 程序段1 #else 程序段2 #endif #include #define CAP 1 int main() { char string[20]="I love China"; char c; int i=0; c=string[i++]; while(c!='\0') { #if CAP if(c>='a'&&c<='z') c-=32; #endif printf("%c",c); c=string[i++]; } printf("\n"); return 0; } 3. 文件包含 功能:一个源文件可将另一个源文件的内容全部包含进来 一般形式: #include “文件名” 或 #include 3. 文件包含 功能:一个源文件可将另一个源文件的内容全部包含进来 一般形式: #include “filename” 或 #include 被包含文件内容 源文件(*.c) 头文件(*.h) 【例3-5】文件包含一下程序包含一个完整的模块(function.c、function.h、test.