嵌入式C语言里的土豪们之变量类型本文引用地址:http://www.eepw.com.cn/article/184332.htm

上一篇我们谈到了运算奢华大户除法(详见《嵌入式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来定义。

运算与内存我们都研究完了,大家想动手写代码吗?

c语言里变量列表,嵌入式C语言里的土豪们之变量类型相关推荐

  1. c语言静态变量存在堆还是栈,c 类 static 函数 什么样是静态变量?嵌入式C语言的堆栈管理如何实现...

    C语言中静态变量是什么意思,有什么作用,static在数据类型前面表示什么 最近刚看了C存储类的章节.所以来说说. C语言为变量提供了⑤种不同的存储模型,或者说是存储类. ①个变量可以用存储时期描述, ...

  2. c语言编码风格,讲嵌入式C语言编码风格.ppt

    讲嵌入式C语言编码风格 目 录 简介及说明 语言规则 1.基础 2.数据 3.说明与表达式 4.函数 5.内存及资源 6.源文件 风格指导 7.程序书写 8.命名 9.文档 简介及说明 正确性 易维护 ...

  3. c语言stdoux串口流,嵌入式C语言代码优化的一些经验

    C语言在嵌入式领域凭借着高效与简单的特点成为了一门与底层非常亲近的语言,当时由于嵌入式领域相比计算机领域硬件资源上是非常受限的,比如主频比较低.内存小等等. 这样就对嵌入式软件就有了新的要求,务必要写 ...

  4. c语言指针尚观嵌入式,C语言-指针

    本文目录 •直接引用 •一.什么是指针? •二.指针的定义 •三.指针的初始化 •四.指针运算符 •五.指针的用途举例 •六.关于指针的疑问 指针是C语言中非常重要的数据类型,如果你说C语言中除了指针 ...

  5. linux c与c语言的区别吗,嵌入式c语言与c语言的区别

    原标题:嵌入式c语言与c语言的区别 最广泛使用的系统编程语言是C语言,它是使用自由格式源代码的简单编程语言:它曾用于以前用汇编语言构建的应用程序中.嵌入式C是C语言的扩展,它在嵌入式系统中应用于编写嵌 ...

  6. 嵌入式c语言汇编混合编程,嵌入式C语言和汇编语言的混合编程

    此文章简单介绍 单片机 C语言和汇编语言混合编程的例子.主要用单片机汇编语言编写DS1302的底层驱动,在C语言里通过调用汇编语言,从而实现C和汇编的混合编程. ;汇编语言源文件 ;========= ...

  7. 数据库系统——第九讲 嵌入式SQL语言之基本技巧

    数据库系统--第九讲 嵌入式SQL语言之基本技巧 嵌入式SQL语言概述 (1)交互式SQL语言的局限 (2)嵌入式SQL语言 (3)高级语言中使用嵌入式SQL语言需要解决的问题 变量声明与数据库连接 ...

  8. uml+oopc嵌入式c语言开发精讲_当前火爆的嵌入式领域,为什么选择C语言作为开发语言?了解一下...

    C语言和嵌入式C编程有什么区别?其区别在于嵌入式的C语言是跑在嵌入式的开发板上的,CPU和电脑不一样,所以编译器也是不一样的,生成的可执行程序也是不一样的.选择嵌入式开发语言归结于嵌入式系统开发的特点 ...

  9. Tensorflow 获取model中的变量列表,用于模型加载等

    目录 前言 1. 用tensorflow自带的工具 2. 用tensorflow.contrib.slim. 3. 从保存的model中提取var_list 4. 其他 前言 在加载预训练的网络模型时 ...

最新文章

  1. 关于Titandb Ratelimiter 失效问题的一个bugfix
  2. redis在php中的使用介绍
  3. js小效果-简易计算器
  4. 汇编语言--call 指令
  5. Flutter创建圆圈图标按钮
  6. 第五十一期:互联网不如国企,去BAT的程序员都是diao丝?
  7. 生产者-消费者 BlockingQueue 运用示例
  8. stats | 概率分布与随机数生成(一)——离散型分布
  9. Mysql调优之explain执行计划详解
  10. String 是值类型还是引用类型
  11. PageStateLayout
  12. maven单元测试报java.lang.IllegalStateException: Failed to load ApplicationContext
  13. Linux gcc编译时强制链接并依赖一个库(即使未使用)
  14. Python 电子书下载列表
  15. 音视频Share系列2---基于H.265的编码技术优化实战
  16. QQ浏览器+7654联盟
  17. wifi连接上不能上网 手机WiFi连接上不能上网的解决办法
  18. 基于 Vue 2.0 的 UI 组件库 KUI for Vue
  19. 简述 Spring Bean的生命周期
  20. 小学生python游戏编程arcade----excel调用

热门文章

  1. 一次代码审计实战案例【思路流程】
  2. 蜜罐中利用jsonp跨域漏洞和xss漏洞的分析
  3. leetcode 最长公共前缀
  4. 【开源】WeChatRobot+WeChatHelper 制作自己的微信机器人
  5. 【prometheus API】删除指定指标数据
  6. 11、MySQL常见错误代码一览表
  7. 【PAT乙级】 1015 德才论 (25 分)
  8. Jedis连接Redis集群
  9. axios get怎么还会显示跨域_在Vue中如何使用axios跨域访问数据
  10. 究竟什么样的简历才能拿到面试?