编译预处理与位运算.ppt
《编译预处理与位运算.ppt》由会员分享,可在线阅读,更多相关《编译预处理与位运算.ppt(64页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、嵌入式嵌入式C语言高级编程篇语言高级编程篇课程目标课程目标了解嵌入式了解嵌入式C语言编程特点和操作细节语言编程特点和操作细节结合嵌入式环境深入理解指针、数组和函数结合嵌入式环境深入理解指针、数组和函数提高编程实践和编程程序规范理解提高编程实践和编程程序规范理解熟悉熟悉C语言标准库应用和特点语言标准库应用和特点课程结构图课程结构图基础知识C语言深入程序规范嵌入式编程熟悉宏定义、嵌熟悉宏定义、嵌入式位操作,初入式位操作,初步理解数据结构,步理解数据结构,同时进一步讲述同时进一步讲述C C编程特点、调试编程特点、调试和解错和解错(第(第1 13 3章)章)详细讲述详细讲述C C语言函语言函数库特点和
2、主要用数库特点和主要用法,以及深入讲述法,以及深入讲述C C语言数组和指针语言数组和指针特点和用途特点和用途(第(第4 45 5章)章)了解了解C C语言高级编程语言高级编程规范,提高程序编规范,提高程序编程健壮行程健壮行(第(第6 6章)章)熟悉嵌入式编程特熟悉嵌入式编程特点,了解嵌入式编点,了解嵌入式编程的主要操作细节程的主要操作细节和调试和调试(第(第7 78 8章)章)编译预处理与位运算编译预处理与位运算编译预处理与位运算编译预处理与位运算编译预处理与位运算编译预处理与位运算 第第第第1 1 1 1章章章章本章目标本章目标本章概述本章概述讲述宏定义的标准用法和位操作的基本应用了解预编译
3、的概念,掌握宏定义的方法。了解“文件包含”与预处理的应用。了解条件编译的几种形式。掌握各种位运算符,运算规则和优先级。了解位运算的实际应用。了解位段的定义和应用。本章目标本章目标了解一些C语言特殊的宏定义熟悉位运算的基本操作重点重点 宏定义操作本章结构本章结构编译预处理编译预处理和位运算编译预处理和位运算位段文件包含宏定义条件编译位运算预处理其他关键词1 编译预处理与位运算编译预处理宏定义文件包含条件编译位运算位段其他预处理关键字1.1编译预处理编译预处理 作用:对源程序编译之前做一些处理,生成扩展C源程序种类宏定义#define#ifdef#ifndef文件包含#include条件编译#if
4、-#else-#endif等其他宏定义#line#error#pragma格式:“#”开头占单独书写行语句尾不加分号1.2 宏定义宏定义 undef无参数宏定义有参数宏定义1.2.1 undef undef定义指令删除前面定义的宏名字。表达一般形式为:#undefmacro-name例子defineMICRO1undefMICRO1.2.2 无参数宏定义无参数宏定义如if(x=YES)printf(“correct!n”);elseif(x=NO)printf(“error!n”);展开后:if(x=1)printf(“correct!n”);elseif(x=0)printf(“error!
5、n”);不带参数宏定义一般形式:#define宏名宏体功能:用指定标识符(宏名)代替字符序列(宏体)如#defineYES1#defineNO0#definePI3.1415926#defineOUTprintf(“Hello,World”);宏体可缺省,表示宏名定义过或取消宏体例#defineMAXMAX+10()例#definePI3.14159printf(“2*PI=%fn”,PI*2);宏展开:printf(“2*PI=%fn”,3.14159*2);例#defineWIDTH80#defineLENGTHWIDTH+40var=LENGTH*2;宏展开:var=80+40*2;()
6、()例#defineWIDTH80#defineLENGTHWIDTH+40var=LENGTH*2;宏展开:var=80+40*2;1.2.2 不带参数宏定义不带参数宏定义宏定义的规则宏名一般习惯用大写字母表示,以便与变量名相区别宏定义不是C语句,不必在行末加分号在进行宏定义时,可以引用已定义的宏名,可以层层替换。只作字符替换,不分配内存空间。#define R 3.0#define PI 3.1415926#define L 2*PI*R#define S PI*R*Rmain()printf(“L=%fnS=%fn”,L,S);结果:结果:L=18.849556 S=28.2743331
7、.2.2 不带参数宏定义不带参数宏定义宏定义的特点宏名一般习惯用大写字母表示提高程序的通用性宏名的有效范围为定义命令之后到本源文件结束可以用#undef命令终止宏定义的作用域宏定义只作简单的替换,不作正确性检查1.2.3 带参数宏定义带参数宏定义一般形式:#define宏名(参数表)宏体例#defineS(r)PI*r*r相当于定义了不带参宏S,代表字符串“(r)PI*r*r”宏展开:形参用实参换,其它字符保留宏体及各形参之间应加空格注意宏体的括号例#define S(a,b)a*b .area=S(3,2);宏展开:area=3*2;不能加空格例#definePOWER(x)x*xx=4;y
8、=6;z=POWER(x+y);宏展开:z=x+y*x+y;一般写成:#definePOWER(x)(x)*(x)宏展开:z=(x+y)*(x+y);1.2.2 带参数宏定义带参数宏定义带参数宏定义的特点带参宏定义中,宏名和形参表之间不能有空格出现例如:#defineMAX(a,b)(ab)?a:b写为:#defineMAX(a,b)(ab)?a:b将被认为是无参宏定义,宏名MAX代表字符串(a,b)(ab)?a:b在带参宏定义中,形式参数不分配内存单元,因此不必作类型定义在宏定义中的形参是标识符,而宏调用中的实参可以是表达式在宏定义中,字符串内的形参通常要用括号括起来以避免出错#define
9、 SQ(y)(y)*(y)main()int a,sq;printf(input a number:);scanf(%d,&a);sq=SQ(a+1);printf(sq=%dn,sq);1.2.2 带参数宏定义带参数宏定义带参的宏和带参函数很相似,但有本质上的不同带参宏函数处理过程不分配内存简单的字符置换分配内存先求实参值,再代入形参处理时间编译时程序运行时参数类型无类型问题定义实参,形参类型程序长度变长不变运行速度不占运行时间调用和返回占时间1.2.2 带参数宏定义带参数宏定义带参的宏和带参函数很相似,但有本质上的不同宏定义例函数例main()int i=1;while(i=5)print
10、f(%dn,SQ(i+);SQ(int y)return(y)*(y);#define SQ(y)(y)*(y)main()int i=1;while(i=5)printf(%dn,SQ(i+);1.3 文件包含文件包含函数例功能:一个源文件可将另一个源文件的内容全部包含进来一般形式:#include“文件名”或#include#include “file2.c”file1.cfile2.cfile1.cfile2.cABA处理过程:预编译时,用被包含文件的内容取代该预处理命令,再对“包含”后的文件作一个源文件编译 直接按标准目录搜索“”先在当前目录搜索,再搜索标准目录1.3 文件包含文件包含
11、被包含文件内容源文件(*.c)头文件(*.h)宏定义数据结构定义函数说明等文件包含可嵌套#include “file2.c”file1.cAfile3.cC#include “file3.c”file2.c Bfile1.cAfile3.cfile2.c1.3 文件包含文件包含例子/*powers.h */#define sqr(x)(x)*(x)#define cube(x)(x)*(x)*(x)#define quad(x)(x)*(x)*(x)*(x)#include#include powers.h#define MAX_POWER 10void main()int n;printf(
12、numbert exp2t exp3t exp4n);printf(-t-t-t-n);for(n=1;n=MAX_POWER;n+)printf(%2dt%3dt%4dt%5dn,n,sqr(n),cube(n),quad(n);1.3 文件包含文件包含文件包含特点一个include命令只能指定一个被包含文件可以用双引号括起来,也可以用尖括号括起来。文件包含允许嵌套被包含文件(file2.h)与其所在的文件(file.c)在预编译之后已成为同一个文件1.4 条件编译条件编译#if、#else、#elif#endif#ifdef和#ifndef1.4.1#if、#else、#elif#endi
13、f 条件编译指令中最常用的或许是#if,#else,#elif和#endif#if的一般形式是:#ifconstant-expressionStatementsequence#endif#endif标记#if块的结束例子:#ifdefCOMPUTER_A#defineINTEGER_SIZE16#else#defineINTEGER_SIZE32#endif1.4.1#if、#else、#elif#endif 条件编译指令中最常用的或许是#if,#else,#elif和#endif#if的一般形式是:#ifconstant-expressionStatementsequence#endif#e
14、ndif标记标记#if块的结束块的结束例子:例子:#ifdefCOMPUTER_A#defineINTEGER_SIZE16#else#defineINTEGER_SIZE32#endif1.4.1#if、#else、#elif#endif#else指令的作用与C语言的else相似,#if指令失败时它可以作为备选指令#else既是标记既是标记#if块的结束,也标记块的结束,也标记#else块的开始块的开始每个#if只能写一个#endif匹配例子:例子:#include#define MAX 100Int main(void)#if MAX99printf(“Compiled for array
15、 greater than 99.n”);#elseprintf(“Complied for small array.n”);#endif return 0;1.4.1#if、#else、#elif#endif#elif指令的意思是“否则,如果”语法格式:语法格式:#if expression#if expressionStatement sequenceStatement sequence#elif expression1#elif expression1Statement sequenceStatement sequence#elif expression2#elif expression
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 预处理 运算
限制150内