对单片机C语言的一些误用和总结_第1页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、对单片机c语言的一些误用和总结在学习的时候才真正知道是什么它是来干什么的但是c语言用到只是它小小的一部分他的应用还有无数地方呢,呵呵我们这里就不研究这个了。我们是不是在写程序的时候错误无数就算编译通过了也达不到我们预期的结果,完了自己是不是也很难找到错在哪儿吧?我绝得语言之所以能称之为语言,它绝对是一种工具一种互相沟通互相通信互相传达之间的意图的工具,作为语言那绝对得有自己的语法,要想互相沟通绝对得先学好它的语法吧(比如像表达式,函数,循环,指针)我称之为c语言的语法。c语言虽然很强大但是他也有不少陷阱,所以我发这篇博客有两个目的一是:把c语言一些误用易错的地方总结一下,二是把c语言一些基本语

2、法总结一下第一次:1.关于自增自减(即+i,i+)要想给一个数加一或减一我们可以:i += 1;j -= 1;而c语言还允许用+和-运算符,其实这里有误导,由于+和-可以作为前缀和后缀,这样的话他们就有可能转变操作数的值,下面让我们来看看:i = 1;printf("i is %dn",+i); /* prints i is 2 */printf("i is %dn",i); /* prints i is 2 */计算表达式i+的结果是i,但是会引发i随后举行自增:i = 1;printf("i is %dn",i+); /* pri

3、nts i is 1/ */printf("i is %dn",i); /* prints i is 2 */第一个printf 显示了i自增前的原始值,其次个printf显示了i变幻后的新值;固然 - 类似我就不举例了但在同一个表达式中多次用法+和-往往很难理解我们看看下面的例子:i = 1;j = 2;k = +i + j+;i,j,k终于值分离是2,3,4而+i是2 j+是2;总结:不管是+i还是i+执行这条语句后i的值都加一了只是(+i)的值加一了而(i+)没变,2.typedef与define2.1.typedefc语言除了挺直用法标准的类型名(如 int cha

4、r float double)和自己声明的结构体、共用体、指针、枚举类型外,还可以用typedef声明新的类型名来代替现有的类型名。typedef unsigned char u8;typedef unsigned int u16;u8 count;u16 time;typedef structu8 month;u8 day;u16 year;date;date brithday;总结一下,声明新的类型名的办法:1.先按定义变量的办法写出定义体(如 unsigned int i)2.在变量名换成新的变量名(如将 i换成u16)3.在最前面加上typedef (typedef unsigned

5、int u16)4.然后用新类型名去定义变量2.2 define2.1.1不带参数的宏定义define 标识符 字符串define pi 3.1415926注重:1.它的作用是在本程序中用指定的标识符pi来代替3.14159262.宏定义是用宏来代替字符串也就是做容易的置换,不做正确性检查假如写成define pi 3.l4l6926即把1写成了字母l但是预处理照常代入不做任何语法检查!2.1.2带参数的宏定义define 宏名(参数) 字符串define s(a,b) a*barea = s(a,b);define max(x,y) (x)>(y) ? (x)y)3.typedef和d

6、efine的区分普通来说typedef 由于它能正确处理指针类型typedef char *string1;define string2 char *string1 s1,s2;string2 s3,s4;s1,s2,s3 被定义为了char* 但s4却被定义为了char型3. static 变量static变量大致分为三种使用1. 用于局部变量中,成为静态局部变量. 静态局部变量有两个使用,记忆功能和全局生存期.2. 用于全局变量,主要作用是限制此全局变量被其他的文件调用.3. 用于类中的成员.表示这个成员是属于这个类但是不属于类中随意特定对象1. 静态局部变量静态局部变量属于静态存储方式,

7、它具有以下特点:(1)静态局部变量在函数内定义 它的生存期为囫囵源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内用法该变量。退出该函数后, 尽管该变量还继续存在,但不能用法它。(2)允许对构造类静态局部量赋初值 例如数组,若未赋以初值,则由系统自动赋以0值。(3) 对基本类型的静态局部变量若在解释时未赋以初值,则系统自动给予0值。而对自动变量不赋初值,则其值是不定的。 按照静态局部变量的特点, 可以看出它是一种生存期为囫囵源程序的量。虽然离开定义它的函数后不能用法,但如再次调用定义它的函数时,它又可继续用法, 而且保存了前次被调用后留下的值。 因此,当多次调用一个函数且要求在调用

8、之间保留某些变量的值时,可考虑采纳静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采纳局部静态变量为宜。举例如下:void fun()static int a = 1;a+;在第一次进入这个函数的时候,变量a被初始化为1!并接着自增1,以后每次进入该函数,a就不会被再次初始化了,仅举行自增1的操作;在static发明前,要达到同样的功能,则只能用法全局变量:int a = 1;void fun()a+;2.静态全局变量全局变量(外部变量)的之前再加上static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量固然也是静态存储方式。

9、 这两者在存储方式上并无不同。这两者的区分虽在于,非静态全局变量的作用域是囫囵源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能用法它。因为静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避开在其它源文件中引起错误。从以上分析可以看出, 把局部变量转变为静态变量后是转变了它的存储方式即转变了它的生存期。把全局变量转变为静态变量后是转变了它的作用域, 限制了它的用法范围。因此static 这个解释符在不同的地方所起的作用是不同的。3.

10、static的类成员变量static关键字有两种意思,你看上下文来推断1.表示变量是静态存储变量,表示变量存放在静态存储区.2.表示该变量是内部衔接(这种状况是指该变量不在任何之内,就象全局变量那样,这时候加上static),也就是说在其它的.cpp文件中,该变量是不行见的(你不能用).二、static 函数 内部函数和外部函数当一个源程序由多个源文件组成时,c语言按照函数能否被其它源文件中的函数调用,将函数分为内部函数和外部函数。1 内部函数(又称静态函数)假如在一个源文件中定义的函数,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用,这种函数称为内部函数。定义一个内部函数,只需在函数类型前再加一个“static”关键字即可,如下所示:static 函数类型 函数名(函数参数表)关键字“static”,译成中文就是“静态的”,所以内部函数又称静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。用法内部函数的益处是:不同的人编写不同的函数时,不用不安自己定义的函数,是否会与其它文件中的函数同名

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论