- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.4 嵌入式C语言程序设计基础 C 语言是美国的Dennis Ritchie在1972年设计发明的。它由早期的编程语言BCPL( Basic Combined Programming Language) 发展演变而来。 3.4 嵌入式C语言程序设计基础 C语言的预处理伪指令 嵌入式程序设计中的函数及函数库 嵌入式程序设计中常用的C语言语句 嵌入式程序设计中C语言的变量、数组、结构和联合 1、C语言的预处理伪指令 文件包含伪指令 宏定义伪指令 条件编译伪指令 文件包含伪指令 1.文件包含的概念 文件包含是指一个源文件可以将另一个源文件的全部内容包含进来。 2.文件包含处理命令的格式 #include “包含文件名” #include 包含文件名 #include 宏标识符 区别仅在于: (1)使用双引号:系统首先到当前目录下查找被包含文件,如果没找到,再到系统指定的“包含文件目录”(由用户在配置环境时设置)去查找。 (2)使用尖括号:直接到系统指定的“包含文件目录”去查找。一般地说,使用双引号比较保险。 (3)先宏扩展后,再按前述方式查找 例如: #include string.h #include ..\common\44b.h #include ..\common\44blib.h 文件包含伪指令 3.文件包含的优点 一个大程序,通常分为多个模块,并由多个程序员分别编程。有了文件包含处理功能,就可以将多个模块共用的数据(如符号常量和数据结构)或函数,集中到一个单独的文件中。这样,凡是要使用其中数据或调用其中函数的程序员,只要使用文件包含处理功能,将所需文件包含进来即可,不必再重复定义它们,从而减少重复劳动。 4.说明 (1)编译预处理时,预处理程序将查找指定的被包含文件,并将其复制到#include命令出现的位置上。 文件包含伪指令 (2)常用在文件头部的被包含文件,称为“标题文件”或“头部文件”,常以“h”(head)作为后缀,简称头文件。在头文件中,除可包含宏定义外,还可包含外部变量定义、结构类型定义等。 (3)一条包含命令,只能指定一个被包含文件。如果要包含n个文件,则要用n条包含命令。 (4)文件包含可以嵌套,即被包含文件中又包含另一个文件。 宏定义伪指令 1.无参宏定义的一般格式 #define 标识符 语言符号字符串 其中:“define”为宏定义命令;“标识符”为所定义的宏名,通常用大写字母表示,以便于与变量区别;“语言符号字符串”可以是常数、表达式、格式串等。 使用宏定义的优点 (1)可提高源程序的可维护性 (2)可提高源程序的可移植性 (3)减少源程序中重复书写字符串的工作量 例: #define LED8ADDR (*(volatile unsigned char *)(0) void Digit_Led_Symbol( int value ) { if(( value =0) (value16)) LED8ADDR = ~Symbol[value]; } 宏定义伪指令 2.带参宏定义的一般格式 #define 宏名(形参表) 语言符号字符串 带参宏的调用和宏展开 (1)调用格式:宏名(实参表) (2)宏展开:用宏调用提供的实参字符串,直接置换宏定义命令行中、相应形参字符串,非形参字符保持不变。 说明 (1)定义有参宏时,宏名与左圆括号之间不能留有空格。否则,C编译系统将空格以后的所有字符均作为替代字符串,而将该宏视为无参宏。 (2)有参宏的展开,只是将实参作为字符串,简单地置换形参字符串,而不做任何语法检查。在定义有参宏时,在所有形参外和整个字符串外,均加一对圆括号。 宏定义伪指令 例: #define SQR(x,y) sqrt((x)*(x)+(y)*(y)) ?为什么使用(X),(Y) #define min(x1,x2) ((x1 x2)?x1:x2) #define max(x1,x2) ((x1x2)?x1:x2) 练习:如何用参数宏实现十六进制0-0xf到ascii ‘0’-’F’的转换? #define RECTANGLE_AREA( a, b ) a * b #define RECTANGLE_AREA( a, b ) (a * b) #define RECTANGLE_AREA( a, b ) (a) * (b) 示例:如下用法可能导致错误。 #define SQUARE( a ) ((a) * (a)) int a = 5; int b; b = SQUARE( a++ ); // 结果:a = 7,即执行了两次增1。 宏定义伪指令 3.条件宏定义 一般格式
文档评论(0)