嵌入式C言语里的土豪们之变量类型
上一篇咱们谈到了运算豪华大户除法(详见《嵌入式C言语里的土豪们之除法与移位》http://www.eepw.com.cn/article/182359.htm),这们再来研讨一下内存的耗费土豪——变量类型的界说。
“界说变量的类型要根据该变量运用的巨细规模来定,在满意其最大值的条件下,运用最小空间的变量类型。”这条界说方法咱们初学嵌入式编程的人们都会遇到,那么这个怎么去履行也成为了要害。例如,咱们在界说时钟项目时,运用一个变量来代表“秒”的变量,明显,这个“秒”变量的最大值是60。那么,咱们就能够运用“char”类型来界说他了。很简略,“0-59”的变量规模,最小的规模为128规模内的char,而int类型要达到了32726,看吧!仍是char类型更小、更节约类型。但是,其背面的真的有这么简略吗?跟着笔者一起来讨论吧!
这个主意的初衷必定是为了节约内存,当然,笔者首要赞同这种以最大值来考虑界说变量规模,并挑选是有符号类型,仍是无符号类型。但是,针对咱们嵌入式C言语编译器来说,仍是运用可移植的固定长度变量界说方法来界说咱们一切的变量。
当咱们看到“char seconds;”这一句的时分,其实很难了解原作者的意思。由于咱们不知道原作者运用“char”类型是只是为了其数值表明规模现已契合了变量界说要求,仍是出于其它意图?异或是,原作者现已深知编译器默许会将“char”类型转换为“unsigned char”?“short long”的变量类型也会如此之“费事”。因而一个“short”变量类型可所以16位,也可所以32位,这个彻底取决于编译器与咱们方针处理器的位宽——这个原作者应该现已知道,当然,或许被忽略了。
“不管何时都要运用C99格局的可移植固定变量界说类型来界说变量的长度。”
Uint16_t这种类型界说方法,我想,你肯定不会了解错的我意图,即便我现已熟睡百年……这种类型界说的方法不只新添了变量并且一起也更好的注释了界说类型,极大的增加了源代码的可读性。C99规范现已为咱们预界说了各种固定长度的变量,也是时分将“short”“long”等类型从咱们的源文件里除掉的时分了,甚至在咱们在运用中就运用ASCII码来表明的字符也不要运用“char”类型。任何事情也不要肯定化,假如咱们只是在某个循环中运用了“int I ”也是无所谓的。
这儿笔者提示一下咱们,假如不想自己去编译测验各个变量的类型宽度,也能够运用“stdint.h”的头文件,C99编译器现已为咱们预备好了。假如只想运用多少位,也能够运用uint_leastN_t 与uint_fastN_t来界说。
运算与内存咱们都研讨完了,咱们想动手写代码吗?