嵌入式系统开发人员应尽可能明确,以避免 ASSUME 综合症并在其系统中产生意外行为。在今天的文章中,让我们来看看嵌入式开发人员可以通过更明确的方式清理代码的几个领域。

嵌入式系统开发人员应尽可能明确,以避免 ASSUME 综合症并在其系统中产生意外行为。在今天的文章中,让我们来看看嵌入式开发人员可以通过更明确的方式清理代码的几个领域。

Mix of office supplies and gadgets on a wooden desk background. View from above.

显式编程技巧 #1 – 将 extern 与公共函数一起使用

我们都知道我们不应该使用 extern,因为它会创建全局变量,进而可能导致各种问题。但是,实际使用 extern 的一个好地方是在创建公共函数时。

当你定义一个公开的函数时,你可以使用以下命令在标头中创建声明或原型:

void Foo(void);

它在标题中,所以很明显它是一个公共的外部函数。但是,我遇到过这样的情况,你正在维护一个别人编写的模块,并且在像 Bar 这样的函数的标头中没有公共 API,但它的定义如下:

void Bar(void)
{…}

这个函数的目的是什么? 它应该是私有的并且前面有一个静电吗?它应该是公开的并在标题中定义吗?如果嵌入式开发人员将 Bar 定义为:

extern Bar(void)
{…}

我们会知道它是公开的并且在 API 中缺失,尽管有人调用它,链接器仍然能够找到它。

显式编程技巧 #2 – 将指针作为 const 传递给函数,除非它们改变

指针是危险的,如果它们在执行过程中意外地以某种意想不到的方式递增、递减或修改,它们很容易导致灾难。我经常会遇到如下所示的函数声明:

void Foo(uint32_t * Param1);

这个声明是如此含蓄,我读了这个声明,其目的是将一个指针传递给一个 uint32_t,其中指针和指向的 uint32_t 内存位置都允许更改!

这是嵌入式开发人员的本意吗? 如果他们只是想传递一个指向变量的指针,以便它通过引用传递并且可以被函数修改怎么办? 这个函数可以做到这一点,但他们也打开了修改指针的选项!

下面的陈述对我来说非常清楚,指针不会改变,指向的值可以改变:

void Foo(uint32_t * const Param1);

参数是指向 uint32_t 内存位置的 const 指针。指针在函数中不能改变,但指向的东西可以。因此,如果有人在函数中执行以下操作:

Param++;

编译器会说“不! 错误!”,让维护者明白他们不应该这样做。

显式编程技巧 #3 – 将“no reference”变量作为 const 传递

现在,这通常会让嵌入式开发人员兴奋不已,而且不是很好。有人告诉我这是无稽之谈,但同样,它使包括新手在内的任何开发人员都清楚代码。

这里的想法是我可能有一个声明如下的函数:

void Foo(uint32_t Param1);

在这种情况下,我通过副本而不是引用传递参数,以供函数使用。该函数理论上可以对本地副本执行任何操作。但同样,如果有人在维护这段代码,他们是否知道我们想要接收参数并将其用作常量? 对我来说,除非声明是这样写的,否则我不会有任何线索:

void Foo(const uint32_t Param1);

这告诉我,该参数预计不会在副本中更改或修改以供本地使用。

这些提示有助于使代码更清晰,并有助于嵌入式开发人员理解代码的真正意图。现在,这些可能不是导致所有这些损失的隐式代码的最佳做法,但它们确实让你认为你应该编写尽可能清晰的软件。

如果你是C开发人员请看这三个显式编程技巧相关推荐

  1. 【热门收藏】iOS开发人员必看的精品资料(100个)——下载目录

    [热门收藏]iOS开发人员必看的精品资料(100个)--下载目录 iPhone.iPad产品风靡全球,巨大的用户群刺激着iOS软件开发需求,然而国内人才缺口很大,正处于供不应求的状态,ios开发前景大 ...

  2. Android开发人员资料大全(开发人员必看)

    在移动开发如火如荼的今天,Android开发市场广阔,是目前市场占有率最高的智能手机操作系统.这个文档里整理大量优质的Android开发资料,网上的资料众多,参差不齐,然而这批资料确实经过精心整理的, ...

  3. iOS开发人员必看的精品资料

    [热门收藏]iOS开发人员必看的精品资料(100个)--下载目录 iPhone.iPad产品风靡全球,巨大的用户群刺激着iOS软件开发需求,然而国内人才缺口很大,正处于供不应求的状态,ios开发前景大 ...

  4. 【热门收藏】iOS开发人员必看的精品资料(100个)

    [热门收藏]iOS开发人员必看的精品资料(100个)--下载目录 iPhone.iPad产品风靡全球,巨大的用户群刺激着iOS软件开发需求,然而国内人才缺口很大,正处于供不应求的状态,ios开发前景大 ...

  5. 【热门收藏】iOS开发人员必看的精品资料(100个) ...

    [热门收藏]iOS开发人员必看的精品资料(100个)--下载目录 iPhone.iPad产品风靡全球,巨大的用户群刺激着iOS软件开发需求,然而国内人才缺口很大,正处于供不应求的状态,ios开发前景大 ...

  6. iOS开发人员必看的精品资料(100个)(转)

    [热门收藏]iOS开发人员必看的精品资料(100个)--下载目录 iPhone.iPad产品风靡全球,巨大的用户群刺激着iOS软件开发需求,然而国内人才缺口很大,正处于供不应求的状态,ios开发前景大 ...

  7. 2012HTML5开发人员必看资料(45个)

    2019独角兽企业重金招聘Python工程师标准>>> 为了方便大家学习,小弟最近整理了一批免积分下载的HTML5开发人员必看资料,共45个,整理了这批资料的下载地址,大家可以根据自 ...

  8. .NET开发人员必看:提高ASP.NET Web应用性能的24种方法和技巧——转

    性能问题到底该如何解决?以下是应用系统发布前,作为 .NET 开发人员需要检查的点. 1.debug=「false」 当创建 ASP.NET Web应用程序,默认设置为「true」.开发过程中,设置为 ...

  9. 网站分享,希望提升自身能力的开发人员必看

    在软件行当也混了有4个年头了,刚毕业那会,觉得百度好强大,工作过程中遇到的问题都能从中查到解决方案.随着能力的提升,对于百度的定位:"其就是用来找些低俗的内容而已".毕业第一年刚进 ...

最新文章

  1. 《科学》十大年度科学突破反映的新动向
  2. 【Flutter学习】组件学习之目录
  3. JScrollPane 双滚动条
  4. Hangry 饥饿成怒 2016-10-03
  5. 3.8 matlab函数参数与变量的作用域
  6. 走进JVM之一 自己编译openjdk源码
  7. python3之协程(4)---gevent实现协程操作
  8. 大数据基础系列 5:Hadoop 实验——熟悉常用的 HDFS 目录操作和文件操作
  9. 20. Cookie 和 Session
  10. 博为峰JavaEE技术文章 ——MyBatis RowBounds分页
  11. refprop物性库_REFPROP下载-REFPROP官方版下载[制冷剂物性查询]-天极下载
  12. Springboot打包部署到linux服务器的方法
  13. PLC编程语言汇总,留言告诉我你会哪一个?
  14. 麋鹿微博工具箱 · 批量删除微博、设置仅自己可见、仅好友可见等
  15. SyntaxError报错成功解决
  16. Doris1.1.1多种异构数据源数据导入方案
  17. 基于Php美妆化妆品商城购物网站
  18. 汇编程序设计-11-AX、BX、CX、DX寄存器
  19. 爬虫ua设置及ip代理
  20. 【AI每日播报】苹果入局无人车 当百度机器人拒绝和我聊李彦宏

热门文章

  1. 你的裸照,一键生成,令人害怕的不是算法,是人心!
  2. 漫画:什么是计数排序?
  3. python之⾯向对象-继承
  4. 利用python将数据写入CSV文件中
  5. C语言数组只会输出两个!_只愿与一人十指紧扣_新浪博客
  6. 基于OpenCV的特定区域提取
  7. 什么是近似算法?它适用于哪些问题?这篇文章给你答案
  8. iphone默认的heic格式怎么在电脑中打开
  9. sqlmap 常用操作
  10. Laravel之Eloquent ORM访问器调整器及属性转换